2016-06-13 1 views
9

J'ai une question assez simple, j'espère, a une réponse simple. J'utilise la méthode de Swift filter pour filtrer une collection d'objets en utilisant l'argument de fermeture anonyme $0:Imprimer (po) la valeur d'un argument de fermeture anonyme Swift de la console dans Xcode

let filteredArray = myArray.filter { 
    $0.name != "Bob" 
} 

J'ai mis un point d'arrêt dans la fermeture du filtre et que vous voulez juste pour vérifier la valeur de $0, mais quand je tape po $0 sur la console il me donne:

(lldb) po $0

error: :2:1: error: anonymous closure argument not contained in a closure

$0

^

Comment puis-je contourner ce problème? Pour être clair, le code compile et s'exécute, mais me donne cette erreur sur la console au moment de l'exécution.

+0

Je voudrais aussi trouver un moyen de le faire, mais il semble que ce soit actuellement une limitation de lldb: https://bugs.swift.org/browse/SR-2029 – kball

Répondre

14

Ceci est un problème connu avec Xcode 8.1 GM Seed. De l'release notes:

Anonymous closure arguments in Swift cannot be used in LLDB expressions. For example, po $0 is not supported.

Vous pouvez utiliser la commande variable de l'image à imprimer sa valeur:

fr va $0 

Ce numéro est classé comme rdar://28611943.

0

Essayez quelque chose comme ceci afin de déboguer avec po votre contenu dans le tableau filtré:

let filteredArray = myArray.filter { 
    (anElement) in anElement.name != "Bob" 
} 

Puis, avec votre point d'arrêt:

(lldb) po anElement 
+0

Merci. Je cherche un moyen de le faire sans réécrire mon code si possible. – devios1