在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

07-24 20:40