2016-09-28 73 views
0

我已經得到了我已經創建了一個看起來像一個URL:值只更新一次?

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是什麼,它都會被放入url中。

每次之後,該值都不會更新。無論我輸入的網址是什麼,它都會打印出來,因爲它是在按下第一個按鈕之後。

當然,每次我設置Info.sharedInstance.text = formattedString它應該更新,並在此之後,我要求URL被按下,所以我不明白爲什麼會發生這種情況。

編輯:好吧,如果我將它按預期工作URL的打印完成後調用

PROFILE_URL = "\(URL_BASE)\(Info.sharedInstance.platform!)/\(Info.sharedInstance.region!)/\(Info.sharedInstance.text!)/profile" 

直接。我想我的問題更多的是爲什麼我必須這樣做。爲什麼如果我更改構成URL的Info.sharedInstance值,即使我不記得設置URL,該URL也不正確? PROFILE_URL由變量組成,看起來像打印(PROFILE_URL)被調用時,PROFILE_URL將獲取Info.sharedInstance的最新版本。

+0

'PROFILE_URL'是公共變量,與'(Info.sharedInstance.platform'不同,PROFILE_URL在設置新值後會改變,它不會自行改變,沒有'PROFILE_URL'的觀察者/監聽者以瞭解Info.sharedInstance.platform是否已更改 – xmhafiz

回答

1

不,你誤解了。

如果你有

var string = "woof" 

然後,像

var result = "string = \(string)" 

表達式計算的引號字符串一次,與在那一刻,他們的當前值repalces逃脫的變量。

一旦該語句運行,result包含「string = woof」。如果string中的值發生變化,result的內容不會更改。