好的,这里有一个关于 S/O 的问题,标题如下:
从它的名字来看,这似乎正是我想要的。但是,查看已接受的答案(以及其他未接受的答案),他们指的是关键路径操作,这不是我所追求的。(即这不是重复的!)
就我而言,我希望将一个变量的名称存储在字符串类型的第二个变量中。
在 C# 中,这很简单nameof
,就像这样......
int someVar = 3
string varName = nameof(someVar)
// 'varName' now holds the string value "someVar"
注意:
nameof()
在编译时执行,而不是在运行时执行,因此不需要反射或其他任何东西。编译器只是简单地替换变量的名称,就好像有人手动将其名称键入为字符串常量一样。
例如,当您想要定义一个查询对象时,您的成员名称与 URL 中传递的查询参数相匹配,这非常方便。
这是一个伪代码示例(即,这显然不会编译,但显示了我所追求的。)
另外,请不要专注于 URL 方面。这绝对是*糟糕的代码*。在实际代码中,我会使用URLComponents
,而不是像我在这里做的那样对 URL 进行字符串附加。同样,这*仅*说明了我的问题,而不是构建 URL。
struct queryObject{
let userName : String
let highScore : Int
var getUrl:String{
return "www.ScoreTracker.com/postScore?\(nameof(userName))=\(userName)&\(nameof(highScore))=\(highScore)"
}
}
以下是你如何使用它以及它会返回什么:
let queryObject = QueryObject(userName:"Maverick", highScore:123456)
let urlString = queryObject.getUrl
返回值将是:
www.ScoreTracker.com/postScore?userName=Maverick&highScore=123456
访问变量的字符串表示而不是使用字符串常量的优点有很多:
- 没有硬编码的字符串。
- 您可以像往常一样使用符号的重构/重命名和生成的字符串跟踪
- 允许您使 API 和实现保持同步,这有助于提高可读性。
例如,假设 API 将查询参数从 更改userName
为userId
,只需重构变量名称,输出就会相应更新,而无需手动触摸任何字符串。
那么,这可以在 Swift 中完成吗?你能得到实际的变量名并将其存储在第二个变量中吗?