我试图使用NSSortDescriptor
以便在swift 4中使用密钥路径对结构列表进行排序。但是当NSSortDescriptor
中有一个EXC_BAD_INSTRUCTION
时,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)
相关堆栈跟踪如下所示。
#0 0x00000001007f97a0 in specialized _assertionFailure(_:_:file:line:flags:) ()
#1 0x0000000100ec5a12 in specialized static _KVOKeyPathBridgeMachinery._bridgeKeyPath(_:) ()
#2 0x0000000100e32142 in NSSortDescriptor.init<A, B>(keyPath:ascending:) ()
这使我认为nssortdescriptor不适用于非kvo对象,但是编译器既没有警告我,nssortdescriptor的文档也没有提到密钥路径需要用于向objective-c运行时公开的对象。
最佳答案
实际上,基于keypath的排序描述符需要一个属性
暴露在objective-c运行时中,这需要一个class
:
class Foo {
let bar : Int = 0
@objc let baz : String = ""
}
无用的诊断已经被跟踪为SR-5115KeyPath-based KVO: No diagnostic for inaccessible KVO KeyPaths。
关于swift - 快捷键路径在NSSortDescriptor中导致EXC_BAD_INSTRUCTION,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46756961/