所以我试图在Swift中将实际变量名称作为字符串,但是没有找到方法这样做......或者我可能在一个不好的角度看待这个问题和解决方案.
所以这基本上就是我想做的事情:
var appId: String? = nil
//This is true, since appId is actually the name of the var appId
if( appId.getVarName = "appId"){
appId = "CommandoFurball"
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我无法在苹果文档中找到任何与此相近的内容,但是:
varobj.self or reflect(var).summary
Run Code Online (Sandbox Code Playgroud)
但是,这给出了变量本身内部或变量类型的信息,在这种情况下是String,我想要变量的实际名称.
And*_*rew 48
这在Swift 3中正式支持使用#keyPath()
https://github.com/apple/swift-evolution/blob/master/proposals/0062-objc-keypaths.md
示例用法如下:
NSPredicate(format: "%K == %@", #keyPath(Person.firstName), "Wendy")
Run Code Online (Sandbox Code Playgroud)
在Swift 4中,我们有更好的东西:\KeyPath符号
https://github.com/apple/swift-evolution/blob/master/proposals/0161-key-paths.md
NSPredicate(format: "%K == %@", \Person.mother.firstName, "Wendy")
// or
let keyPath = \Person.mother.firstName
NSPredicate(format: "%K == %@", keyPath, "Andrew")
Run Code Online (Sandbox Code Playgroud)
速记是一个受欢迎的补充,能够从变量引用键路径是非常强大的
Col*_*inE 27
根据这个答案的更新,它在Swift 3 via中得到支持#keyPath
NSPredicate(format: "%K == %@", #keyPath(Person.firstName), "Andrew")
Run Code Online (Sandbox Code Playgroud)
小智 5
这是我的解决方案
class Test {
var name: String = "Ido"
var lastName: String = "Cohen"
}
let t = Test()
let mirror = Mirror(reflecting: t)
for child in mirror.children {
print(child.label ?? "")
}
Run Code Online (Sandbox Code Playgroud)
打印将
name
lastName
Run Code Online (Sandbox Code Playgroud)