Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
573 views
in Technique[技术] by (71.8m points)

reflection - Get a Swift Variable's Actual Name as String

So I am trying to get the Actual Variable Name as String in Swift, but have not found a way to do so... or maybe I am looking at this problem and solution in a bad angle.

So this is basically what I want to do:

var appId: String? = nil

//This is true, since appId is actually the name of the var appId
if( appId.getVarName = "appId"){
    appId = "CommandoFurball"
}

Unfortunately I have not been able to find in apple docs anything that is close to this but this:

varobj.self or reflect(var).summary 

however, this gives information of what is inside the variable itself or the type of the variable in this case being String and I want the Actual name of the Variable.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This is officially supported in Swift 3 using #keyPath()

https://github.com/apple/swift-evolution/blob/master/proposals/0062-objc-keypaths.md

Example usage would look like:

NSPredicate(format: "%K == %@", #keyPath(Person.firstName), "Wendy")

In Swift 4 we have something even better: KeyPath notation

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")

The shorthand is a welcome addition, and being able to reference keypaths from a variable is extremely powerful


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...