我正在尝试使用NSSortDescriptor
,因此使用Swift 4中的密钥路径对结构列表进行排序。但NSSortDescriptor
的初始化在{{1}中与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)
这让我觉得NSSortDescriptor不能用于非KVO对象,但是编译器都没有给我一个警告,NSSortDescriptor的文档也没有提到关键路径需要用于暴露给Objective的对象-C运行时。
答案 0 :(得分:2)
实际上,基于keypath的排序描述符需要一个属性
暴露于Objective-C运行时,需要class
:
class Foo {
let bar : Int = 0
@objc let baz : String = ""
}
无益的诊断已被追踪为SR-5115 KeyPath-based KVO: No diagnostic for inaccessible KVO KeyPaths。
答案 1 :(得分:1)
要在swift 4中使用NSSortDescriptors对自定义类数组进行排序,您需要声明如下所示的类。
@objcMembers class Model:NSObject {
var title:String
var num:Int
init(title:String,num:Int) {
self.title = title
self.num = num
}
}