NSObject 的 value(forKey:) 在 Swift 4 中不起作用
value(forKey:) for NSObject not working in Swift 4
正在 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).
键值编码需要 Objective-C。在 Swift 4 中,您必须明确标记可从 Obj-C 访问的成员:
@objcMembers
class Person: NSObject {
或
class Person: NSObject {
@objc var name = ""
var age = 0
}
ObjC 推断已 limited 在 Swift 4. 您可以将 class 标记为 objcMembers
以便编译器生成符合 ObjC 的访问器:
@objcMembers
class Person: NSObject {
var name = ""
var age = 0
}
或者通过在构建设置中将 Swift 3 Objc Inference 设置为 On 来恢复旧行为:
正在 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).
键值编码需要 Objective-C。在 Swift 4 中,您必须明确标记可从 Obj-C 访问的成员:
@objcMembers
class Person: NSObject {
或
class Person: NSObject {
@objc var name = ""
var age = 0
}
ObjC 推断已 limited 在 Swift 4. 您可以将 class 标记为 objcMembers
以便编译器生成符合 ObjC 的访问器:
@objcMembers
class Person: NSObject {
var name = ""
var age = 0
}
或者通过在构建设置中将 Swift 3 Objc Inference 设置为 On 来恢复旧行为: