- 在Swift4.0之后,類必須要繼承自NSObject,同時(shí)還需要在屬性前面加上@objc
否則會(huì)報(bào)錯(cuò)
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<test3.Person 0x600000449880> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key name.'
- Cannot convert value of type '[String : String]' to expected argument type '[String : AnyObject]'
實(shí)例代碼:
import UIKit
class Person:NSObject{
@objc var name:String?
init(dict:[String:AnyObject]) {
super.init()
setValuesForKeys(dict)
}
}
class ViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
let dict = ["name":"1234"]
let p1 = Person(dict: dict)
print("\(p1.name!)")
}
}
因?yàn)槲椰F(xiàn)在在學(xué)習(xí)swift,這段代碼我是參考網(wǎng)上的代碼寫(xiě)的,寫(xiě)出來(lái)后一直報(bào)錯(cuò),我也不知道怎么辦
后來(lái)發(fā)現(xiàn)是swift的類型變嚴(yán)格了,于是就有下面兩種方法
import UIKit
class Person:NSObject{
@objc var name:String?
init(dict:[String:Any]) {
super.init()
setValuesForKeys(dict)
}
}
class ViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
let dict = ["name":"1234"]
let p1 = Person(dict: dict)
print("\(p1.name!)")
}
}
import UIKit
class Person:NSObject{
@objc var name:String?
init(dict:[String:AnyObject]) {
super.init()
setValuesForKeys(dict)
}
}
class ViewController: UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
let dict = ["name":"1234" as AnyObject]
let p1 = Person(dict: dict)
print("\(p1.name!)")
}
}
如果有什么寫(xiě)的不好的地方,希望大家評(píng)論區(qū)告訴我,畢竟我也才學(xué)swift,很多地方都不懂