今天樓主要把老項(xiàng)目從3.0升級至4.0情萤,升級之后項(xiàng)目運(yùn)行不報(bào)錯,但是所有頁面都沒有數(shù)據(jù)摹恨,故推斷是baseModel里出了問題紫岩,我的baseModel里是這樣寫的
init(_ dictionary:[String : Any]?) {
super.init()
if dictionary == nil{
return
}
self.setValuesForKeys(dictionary!)
}
override func setValue(_ value: Any?, forKey key: String) {
super.setValue(value, forKey: key)
}
override func setValue(_ value: Any?, forUndefinedKey key: String) {
}
檢查之后發(fā)現(xiàn)這么寫并沒有問題,那么問題出在了哪里呢睬塌?
向下檢查baseModel子類,發(fā)現(xiàn)出在了baseModel子類里面
class ERPImModel: ERPBaseModel {
var page_no = ""
var page ""
}
baseModel中我使用了setValueForkey歇万,由于繼承自NSObjct所以子類model里的屬性在swift3.0下是自動添加@objc的揩晴, 而swift4.0不會自動添加@objc,沒有運(yùn)行時特性贪磺,需要我們手動添加@objc(暫且這么理解硫兰,實(shí)際上 Swift 的靜態(tài)語言特性,每個函數(shù)的調(diào)用在編譯期間就可以確定寒锚。因此在編譯完成后可以檢測出沒有被調(diào)用到的 swift 函數(shù)劫映,優(yōu)化刪除后可以減小最后二進(jìn)制文件的大小。這個功能在 XCode 9 和 Swift 4 中終于被引進(jìn)刹前。實(shí)際上即使你添加了@objc swift也會自動優(yōu)化變成靜態(tài)調(diào)用的泳赋,如果要使用oc的運(yùn)行時特性則要添加dynamic,請移步他處)
修改子類model如下
class ERPImModel: ERPBaseModel {
@objc var page_no = ""
@objc var page = ""
}
完美升級4.0