Je suis en train d'utiliser un NSSortDescriptor
afin de trier une liste de struct en utilisant un chemin clé dans Swift 4. Mais l'initialisation des NSSortDescriptor
accidents avec un EXC_BAD_INSTRUCTION
dans NSSortDescriptor
Key Path Swift provoque EXC_BAD_INSTRUCTION dans NSSortDescriptor
struct Foo {
let bar : Int
let baz : String
}
let x = [Foo(bar: 1, baz: "Hello"),
Foo(bar: 2, baz: "World")]
let sortDescriptor = NSSortDescriptor(keyPath: \Foo.baz, ascending: true)
La trace de pile correspondante ressemble à ceci.
#0 0x00000001007f97a0 in specialized _assertionFailure(_:_:file:line:flags:)()
#1 0x0000000100ec5a12 in specialized static _KVOKeyPathBridgeMachinery._bridgeKeyPath(_:)()
#2 0x0000000100e32142 in NSSortDescriptor.init<A, B>(keyPath:ascending:)()
Cela me fait penser que NSSortDescriptor ne fonctionne pas avec des objets non KVO, mais ni le compilateur me donne un avertissement, ni ne la documentation de NSSortDescriptor mentionner que le chemin de la clé doit être un objet qui est exposé à l'exécution Objective-C.
Merci pour votre réponse! Donc le runtime Objective-C est nécessaire pour NSSortDescriptor? Je m'attendais à ça, mais c'était quand même un peu bête. J'aurais vraiment aimé l'utiliser pour les structures. –
@ThomasBartelmess: Oui. Vous pouvez également l'appliquer uniquement à 'NSArray', donc son utilisation pour les types natifs Swift est très limitée. –