我已经创建了一个看起来像这样的网址:
var PROFILE_URL = "\(URL_BASE)\(Info.sharedInstance.platform!)/\(Info.sharedInstance.region!)/\(Info.sharedInstance.text!)/profile"
Info.sharedInstances来自静态变量:
class Info {
static var sharedInstance = Info()
private init() {}
var region : String!
var platform : String!
var text : String!
}
然后在我点击视图中的某些按钮时设置这些值。
我击中的最后一个按钮是:
@IBAction func findUserAction(_ sender: AnyObject) {
if textLabel.text != nil && textLabel.text != "" {
let formattedString = textLabel.text?.replacingOccurrences(of: "#", with: "-")
Info.sharedInstance.text = formattedString
print(PROFILE_URL)
}
当我第一次点击此按钮时,URL会更新。当我打印出来时,我得到一个URL,无论text.text最终是什么,都会被放入网址。
每次之后,该值都不会更新。在第一次按下按钮之后,我输入的网页打印输出的内容并不重要。
当然,每当我设置Info.sharedInstance.text = formattedString时,它应该更新,之后我就要求按下URL,所以我不明白为什么这样做正在发生。
编辑:好的,如果我打电话
PROFILE_URL = "\(URL_BASE)\(Info.sharedInstance.platform!)/\(Info.sharedInstance.region!)/\(Info.sharedInstance.text!)/profile"
直接打印出我按预期工作的URL。我想我的问题更多是为什么我必须这样做。为什么我更改组成URL的Info.sharedInstance值会导致URL不正确,即使我没有回忆设置URL? PROFILE_URL由变量组成,似乎在调用print(PROFILE_URL)时,PROFILE_URL将获取Info.sharedInstance的最新版本。
答案 0 :(得分:1)
不,你误解了。
如果你有
var string = "woof"
然后是一个像
这样的表达式var result = "string = \(string)"
评估引用的字符串一次,然后在当时重新使用其当前值的转义变量。
运行该语句后,result
包含" string = woof"。如果result
中的值发生变化,则string
的内容不会发生变化。