簡體   English   中英

在 Swift (iOS) 和 setValue forKey 中繼承 NSObject 的子類

[英]Subclassing a subclass of NSObject in Swift (iOS) and setValue forKey

我正在編寫一個基模型類,它是 NSObject 的子類,然后每個模型都將是該模型的子類。

創建模型時,我提供了一個Dictionary<String, AnyObject>屬性來組成模型屬性。

class Model: NSObject {

  var hi: String = "hi"

  init(attributes: Dictionary<String, AnyObject>) {
    super.init()
    for (index, attribute) in attributes {
      self.dynamicType.setValue(attribute, forKey: index)
    }
  }

}

class User: Model {

  var name: String = "Donatello"

}

當我對NSObject的直接子類執行以下操作時,它可以工作:

let model = Model(attributes: ["hi": "bonjour!"])
print(model.hi) // prints "bonjour!"

甚至在User上做同樣的事情,從NSObject繼承的類的子類工作:

let model = User(attributes: ["hi": "subclass bonjour!"])
print(model.hi) // prints "subclass bonjour!"

但是如果我嘗試設置僅在此子類中可用的屬性,我會得到經典的this class is not key value coding-compliant for the key name.

例如:

let model = User(attributes: ["name": "Raphael"])

導致錯誤。

這個對象作為從NSObject繼承的類的子類,應該自動從NSObject繼承時,為什么會出現這個錯誤。

這是我對子類化的基本理解的問題嗎?

問題在於您對更基本的東西的理解:類和實例。 改變:

  self.dynamicType.setValue(attribute, forKey: index)

到:

  self.setValue(attribute, forKey: index)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM