我在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检查,但是您可以自己进行。

10-04 16:27