我在Swift中有以下代码:
var changed = false
if property1 != obj.property1 {
property1 = obj.property1
changed = true
}
if property2 != obj.property2 {
property2 = obj.property2
changed = true
}
... until property n
return changed
有没有一种方法可以使我更简洁地说我知道要检查的所有属性,比如说我有一个数组= ['property1','property2',..'propertyN']。我是新手,我知道在C#中我会使用反射。
谢谢。
最佳答案
如果obj
是从NSObject
继承的,则可以执行以下操作:var value = obj.valueForKey('property1');
可以通过以下方式设置值:obj.setValueForKey('property1', valueObject);
编辑
假设您要使用一些讨厌的代码,则可以使用如下代码:
var obj = NSObject();
var selfObj = NSObject();
let propertyNames = ["property1", "property2"];
var changed = false
for property in propertyNames {
if obj.valueForKey(property) != nil {
let selfValue = selfObj.valueForKey(property) as! NSObject
let objValue = obj.valueForKey(property) as! NSObject
if selfValue != objValue {
selfObj.setValue(objValue, forKey: property)
changed = true
}
}
}
需要更多的
nil
检查,但是您可以自己进行。