Swift KVC将NSNumber值设置为String键

时间:2016-03-04 09:40:48

标签: swift kvc

我有一个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) {...}

1 个答案:

答案 0 :(得分:0)

如果您知道您的keyPath接受String,您可以使用Swift as?运算符来确保您分配的值可以转换为它。 类似的东西:

self.setValue(value as? String ?? "Bad value", forKeyPath: key)

通过执行此操作,您可以确保为属性传递正确的值(在转换后),或者在案例未成功的情况下传递默认值。