在Swift中,您可以很容易地获得枚举的case名称的字符串表示,比如…
enum Foo
{
case laa1
case laa2
case laa3
}
let varHoldingTheStringLaa1 = String(Foo.laa1) // Returns the string 'laa1'
但是,我不知道如何为一个类成员做同样的事情,就像这样……
class Foo
{
var laa1:String = ""
var laa2:String = ""
var laa3:String = ""
}
// None of these work...
let varHoldingTheStringLaa1 = String(laa1) // Returns the value stored in laa1, not 'laa1'
let varHoldingTheStringLaa1 = String(Foo.laa1) // Won't even compile
在c中,这很容易,多亏了
nameof
。您只需传递想要这样的字符串表示形式的成员…let varHoldingTheStringLaa1 = nameof(laa1) // Returns the string 'laa1'
那么,是否有一个斯威夫特等价物?
最佳答案
在foo中,您可以使用如下反射:
let mirror = Mirror(reflecting: self)
let laa1String = mirror[0].0
let laa2String = mirror[1].0
否则,在持有foo实例时,您可以这样使用它:
let fooInstance = Foo()
let mirror = Mirror(reflecting: fooInstance)
let laa1String = mirror[0].0
let laa2String = mirror[1].0