2016-10-04 19 views
0

這裏是下面的代碼:單獨的類存儲輸入

class settings { 

    static let SharedInstance = settings() 
    var city: String { 
     return self.city 
    } 
} 

現在,我能夠從這樣一個單獨的視圖來訪問這個類:

@IBOutlet weak var cityLabel: UILabel! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    cityLabel.text = settings.SharedInstance.city 
} 

,但我希望能夠從另一個角度改變我的「settings」課程中城市的價值。

喜歡的東西:

@IBOutlet weak var city: UITextField! 
@IBAction func saveButtonClicked(_ sender: AnyObject) { 
    settings.SharedInstance.cityVar(city.text) 
    closeKeyboard() 
} 

我不知道如何從這裏

得到我的邏輯是發起setterclass內,或者一個function,需要一個string和改變變量,就像我試圖做的那樣。

UPDATE

我現在可以設置在該類獲取城市名稱:

class settings { 

    static let SharedInstance = settings() 

    var city: String? 
    func setCity(city: String){ 

     self.city = city 
    } 

} 

現在的問題是,當我訪問城市變量在我的課「設置」,在另一看來,它不顯示新值:

override func viewDidLoad() { 
     super.viewDidLoad() 
     cityLabel.text = settings.SharedInstance.city 

    } 

我相信它不會更新視圖

+0

類設置{ 私人VAR _x:= 0 變種X:詮釋{ 集合{_x = 2 * NEWVALUE} 得到{_x/2}} } 嘗試這種方式 –

回答

0

如果您使用以下行:

var city: String { 
    return self.city 
} 

那麼你city將是一個「只得到」屬性。我看不出有什麼理由爲什麼你必須像這樣初始化變量。請澄清,如果你這樣做。

我會建議改變你的變量,以便它是可選的。然後你可以改變你的班級,像這樣:

class settings { 

    static let SharedInstance = settings() 

    var city: String? 

} 

然後你不必爲這個類創建初始值設定項。如果你也想在類中創建一個setter方法,那麼,你就可以了,如:

func setCity(city: String){ 
    self.city = city 
} 

這意味着現在下面的方法將工作:

class myClass: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     cityLabel.text = settings.SharedInstance.city 
     settings.SharedInstance.city = cityLabel.text 
    } 

} 
+0

嗯,嗯,你是對的,它沒有任何意義把它作爲「只得到」 - 我想你的代碼,它的工作,如果我宣佈VAR城市=「東西」 它似乎沒有明白,如果我從我的觀點是這樣設置我的城市: @IBAction FUNC saveButtonClicked(_發件人:AnyObject) {settings.SharedInstance.setCity(city:city.text!) –

+0

它爲該代碼提供了什麼錯誤?我沒有看到那個實現有什麼問題。 –

+0

沒有錯誤,所以永遠:-)它只是沒有做任何事情,當我在我的輸入框中鍵入並按下我的按鈕。 –