NSObject的值(forKey :)无法在Swift 4中运行

时间:2017-06-09 15:29:01

标签: swift swift4

在Xcode 9 Beta中试用Swift 4。

出于某种原因,我在NSObject上使用键值访问器时遇到了崩溃。

有什么想法吗?

import Cocoa

class Person: NSObject {
    var name = ""
    var age = 0
}

let alpha = Person()
alpha.name = "Robert"
alpha.age = 53

alpha.value(forKey: "name")
// error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).

2 个答案:

答案 0 :(得分:15)

键值编码需要Objective-C。在Swift 4中,您必须明确标记可从Obj-C访问的成员:

@objcMembers
class Person: NSObject {

class Person: NSObject {
    @objc var name = ""
    var age = 0
}

请参阅Swift Evolution 160

答案 1 :(得分:6)

在Swift 4中,ObjC推断已经limited。您可以使用objcMembers标记您的类,以便编译器生成符合ObjC的访问器:

@objcMembers
class Person: NSObject {
    var name = ""
    var age = 0
}

或者通过在构建设置中将 Swift 3 Objc Inference 设置为On来恢复旧行为:

enter image description here