基于数组键的Swift动态属性设置

时间:2014-12-09 19:09:18

标签: ios xcode swift

我知道已经存在一些似乎有点覆盖我所问的问题(例如Dynamically set properties from Dictionary<String, Any?> in Swift),但这似乎并不像我所期待的那样对

基本上,我有一个基础对象,我想根据对象设置属性,如下所示:

init(data: Dictionary<String,String>)
{

    for (key, value) in data
    {
        //TODO set property as value here?
    }
}

我希望能够传递键/值的字典并将它们动态添加为对象的属性。我知道这种行为在PHP中是可行的,例如通过$this->{$key} = $value,但我对Swift有些不熟悉,所以我还没有弄清楚如何做到这一点。

另外,如果有人能告诉我我想要在这里实现的功能的名称,那真的很有帮助。不知道这个概念是什么让搜索答案变得困难:c

2 个答案:

答案 0 :(得分:11)

我想扩展@Okapi给出的例子。如果您的类是 NSObject 的子类,则默认情况下会出现 setValue:forKey: valueForKey:方法。因此,您只需使用以下代码

设置属性即可
class Foo: NSObject {
    var x:String=""
    var y:String=""
    var z:String=""
    init(data: Dictionary<String,String>) {
        super.init()
        for (key,value) in data {
            self.setValue(value, forKey: key)
        }
    }
}

答案 1 :(得分:0)

在你的对象中定义(或覆盖)setValue:forKey:,然后从你的init方法中调用它,如下所示:

class Foo {
var x:String=""
var y:String=""
var z:String=""
init(data: Dictionary<String,String>) {
    for (key,value) in data {
        self.setValue(value, forKey: key)
    }
}
func setValue(value: AnyObject?, forKey key: String) {
    switch key {
    case "x" where value is String:
        self.x=value as String
    case "y" where value is String:
        self.y=value as String
    case "z" where value is String:
        self.z=value as String
    default:
        //super.setValue(value, forKey: key)
        return
    }
}

}