swift4.0 KVC 錯誤 this class is not key value coding-compliant for the key name.解決方案

錯誤如下

'[<KVC.Person 0x604000249d20> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key name.'

示例代碼

class Person: NSObject {
    var name: String?
    init(dict :[String: String]) {
        super.init()
        setValuesForKeys(dict)
    }
}
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let p = Person(dict: ["name" : "zml"])
        print("\(p.name ?? "xxx")")
    }
}

在swift3.0時沒問題的,但在4.0就會報錯導(dǎo)致程序崩潰,在網(wǎng)上找了半天后發(fā)先原因:在Swift 4中繼承 NSObject 的 swift class 不再默認(rèn)全部 bridge 到 OC,如果我們想要使用的話我們就需要在class前面加上@objcMembers 這么一個關(guān)鍵字。

在 swift 3 中class 繼承了 NSObject 后,編譯器就會默認(rèn)給這個類中的所有函數(shù)都標(biāo)記為 @objc ,支持 OC 調(diào)用。而在swift4中不會默認(rèn)添加,所以需要手動添加

解決辦法(一)

//在對象聲明前加上了@objc
@objc var name: String?

解決辦法(二)

//在類聲明前加@objcMembers
@objcMembers
class Person: NSObject

注意

如果是int等基本數(shù)據(jù)類型,不能設(shè)置可選的,而且要設(shè)置初始值,否則還會報這個錯,因為在swiftint是一個基本數(shù)據(jù)類型結(jié)構(gòu)體,OC中沒有,OC只有基本數(shù)據(jù)類型

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容