在Swift中,你可以很容易地获得一个枚举的案例名的字符串表示,像这样…
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'
那么是否有一个Swift的等价物?
在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