我知道您可以使用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