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


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


source


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:

enter image description here

+4


source







All Articles