我知道您可以使用setValue(value, forKey: key)
來設置基礎班的屬性,但是如何檢查班級是否具有鑰匙值?檢查班級是否具有鑰匙值
3
A
回答
1
這是令人討厭的問題。在下面的代碼片段中,我使用反射來檢查對valueForObject的調用是否安全。它可能有一個巨大的性能損失...
該解決方案由本blog post
extension NSObject {
func safeValueForKey(key: String) -> AnyObject? {
let copy = reflect (self)
for index in 0 ..< copy.count {
let (fieldName, fieldMirror) = copy[index]
if (fieldName == key){
return valueForKey(fieldName)
}
}
return nil
}
}
class A:NSObject {
var name: String = "Awesome"
}
var a = A()
a.safeValueForKey("name") // "Awesome"
a.safeValueForKey("b") // nil
0
valueForKey(key:String)是func的名稱。
class A:NSObject {
var name: String = ""
}
var a = A()
a.setValue("John", forKey: "name")
a.valueForKey("name") //returns an optional value (AnyObject)
3
Swift3版本雷蒙德的響應的啓發
extension NSObject {
func safeValue(forKey key: String) -> Any? {
let copy = Mirror(reflecting: self)
for child in copy.children.makeIterator() {
if let label = child.label, label == key {
return child.value
}
}
return nil
}
}
class A:NSObject {
var name: String = "Awesome"
}
var a = A()
a.safeValue(forKey: "name") // "Awesome"
a.safeValue(forKey: "b")
相關問題
- 1. 是否有可能在同一個班級有兩把鑰匙?
- 2. 基於密鑰檢索班級價值
- 3. 如何檢查對象是否有鑰匙?
- 4. 檢查密鑰是否有值
- 5. 爲什麼我的班級沒有「鑰匙」功能?
- 6. 檢查鑰匙退格
- 7. 檢查班級是否具有typedef(私人或其他)的特徵
- 8. 檢查一個班級是否有副本?返回true或false
- 9. 黃瓜,如何檢查父母是否有某個班級?
- 10. 如何檢查班級名稱是否有效?
- 11. 檢查一個班級是否有方法
- 12. Ember.Map:鑰匙是否真的有序?
- 13. 檢查變量是否具有值''
- 14. 檢查JComboBox是否具有默認值
- 15. 檢查是否矩陣具有價值
- 16. 檢查是否具有價值
- 17. 檢查班級類型(.class)是否等於其他班級類型
- 18. 矢量。檢查它是否包含「鑰匙」。 C++
- 19. iOS:如何檢查鑰匙串中是否保存了數據?
- 20. 如何檢查所有班級或使用班級?
- 21. 檢查是否與具有
- 22. 排除鑰匙,只有值
- 23. 檢查多個班級
- 24. 鑰匙串訪問中沒有鑰匙
- 25. 檢查GPG/PGP公鑰是否有效
- 26. Pythonic是否具有不屬於班級的全局功能?
- 27. 如何查詢具有相同值的班級
- 28. 檢查Html.ValidationSummary()是否有值
- 29. 檢查是否有空值
- 30. 我是否可以在班級上班並設置一些值?
這引發了一個錯誤如果密鑰沒有被定義 – Okapi 2014-11-20 18:02:57
正如我在評論中所說,這返回一個可選值,如果你打算使用它,你應該檢查零。 – 2014-11-21 12:30:10
不,它崩潰,如果你使用一個未定義的鍵 – Okapi 2014-11-21 16:33:31