我有一个String属性的对象。我必须使用键值编码从外部设置该属性。因此,我正在使用self.setValue(value, forKeyPath: key)
。
问题在于我可以将NSNumber设置为值,导致消息-[__NSCFNumber length]: unrecognized selector sent to instance
崩溃。如何在值和属性之间进行类型检查以避免崩溃?
值将NSObject作为dynamicType返回给我。
obj.valueForKey(key).dynamicType
让我回到AnyObject?
我尝试过,可以做的是:
if (obj.valueForKey(key) is String && value is String) {...}
问题是我的对象显然有多个String属性,它有很多属性。我尝试做的是遍历所有属性并将它们设置为来自Web服务的特定值。现在,我需要通用数据类型检查以查看是否存在类型不匹配,例如
if (obj.valueForKey(key).realtype == value.realtype) {...}
答案 0 :(得分:0)
如果您知道您的keyPath接受String,您可以使用Swift as?
运算符来确保您分配的值可以转换为它。
类似的东西:
self.setValue(value as? String ?? "Bad value", forKeyPath: key)
通过执行此操作,您可以确保为属性传递正确的值(在转换后),或者在案例未成功的情况下传递默认值。