我知道已经存在一些似乎有点覆盖我所问的问题(例如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
答案 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
}
}
}