Swift Key Path导致NSSortDescriptor

时间:2017-10-15 15:54:16

标签: swift cocoa swift4

我正在尝试使用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运行时。

2 个答案:

答案 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
        }

    }