Value (forKey :) for NSObject doesn't work in Swift 4
Trying Swift 4 in Xcode 9 beta.
For some reason I am getting a crash when using keyword access on NSObject.
Any ideas?
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).
+3
closetCoder
source
to share
2 answers
Objective-C is required to encode the key value. In Swift 4, you have to explicitly mark the members available from Obj-C:
@objcMembers
class Person: NSObject {
or
class Person: NSObject {
@objc var name = ""
var age = 0
}
See Swift Evolution 160
+8
Sulthan
source
to share
ObjC inference was limited in Swift 4. You can mark your class objcMembers
so the compiler can generate ObjC compatible accessors
@objcMembers
class Person: NSObject {
var name = ""
var age = 0
}
Or revert the previous behavior by setting Swift 3 Objc Inference to On on Build Settings:
+4
Code Different
source
to share