2017-03-07 60 views
0

我想编写一个函数,它接受一个字符串,然后使用该名称输出class属性的值。在实践中,会有不止一种财产选择形式。例如...使用字符串参数来描述类的属性

class Apple{ 
    var juiciness : Int = 0 
    init(juiciness: Int){ 
    self.juiciness = juiciness 
    } 
} 

var myApple(juiciness : 10) 

func printValue(property : String){ 
    print(Apple.property) // <-- I want to use the string to choose a property 
} 

很显然,我不能做到这一点的代码,但我知道必须有不只是我一系列的if语句更好的解决方案。

+0

http://stackoverflow.com/questions/24138705/access-properties-via:

let label = UILabel() print(label.value(forKey: "font")) 

自己的类可以通过NSObject的继承支持志愿-subscripting-in-swift – chengsam

+0

你真的*想要一个字符串吗?这将更好地实施封闭。 – Hamish

+0

为了将来的参考,这种功能被称为“反射” – Alexander

回答

1

苹果已经为你做了这个。它被称为键值观察(KVO)。 试试下面的代码在操场:

class YourClass: NSObject{ ... } 
+0

作为NSManagedObject,我可以从NSObject继承吗? – spogatetz

+1

@spogatetz NSManagedObject是NSObject的一个子类。你可以简单地从NSManagedObject继承。 – LinShiwei

+0

这很有道理,谢谢。 – spogatetz