【发布时间】:2016-12-20 10:08:21
【问题描述】:
在 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 等价物吗?
【问题讨论】:
-
如果您已经知道属性的名称,为什么不直接分配一个文字,例如:
let varHoldingTheStringLaa1 = "laa1" -
Swift 的反射能力是一项正在进行中的工作,从我所读到的内容来看,甚至不清楚该进展的终点是什么。如果你有兴趣,最近在 swift-evolution 列表中进行了讨论,今年春天。不过目前还没有与
nameof()相媲美的操作。 -
Codedifferent,这是因为我试图避免使用 hard.coding 字符串。我也想要重构支持。希望 Swift 会添加它,因为它在 c# 中非常有用,尤其是反射 sdks。
标签: swift reflection introspection