2017-07-19 43 views
0

我傳遞使用Singelton這裏是我的Singelton類的UITextField值:Swift3 - 辛格爾頓分享的UITextField值不更新第二次

class CityName { 
    static var sharedInstance = CityName() 
    private init() {} 
    var cityName:String! 
} 

這裏是我的固定課堂,我使用這個值

let WEATHER_URL = BASE_URL + CityName.sharedInstance.cityName + API_Key 

在我的視圖控制器我使用按鈕來傳遞價值:

@IBAction func searchButtonTapped(_ sender: Any) { 
    CityName.sharedInstance.cityName = cityNameTextField.text! 
    print(CityName.sharedInstance.cityName) 
    networkConnection.getWeatherDetails { 
     self.currentTempLabel.text = String(self.networkConnection.currentTemp) 
     self.minTempLabel.text = String(self.networkConnection.minTemp) 
     self.maxtTempLabel.text = String(self.networkConnection.maxTemp) 
    } 
} 

,並在我的網絡當我輸入在文本字段第一時間值類我正在URL連接

func getWeatherDetails(completed: @escaping DownloadComplete) { 
    print(WEATHER_URL) 
    Alamofire.request(WEATHER_URL).responseJSON { response in 
     let result = response.result 
     if let dict = result.value as? Dictionary<String, AnyObject> { 
      if let main = dict["main"] as? Dictionary<String, AnyObject> {     
       if let currentTemperature = main["temp"] as? Double { 
        let kelvinToFarenheitPreDivision = (currentTemperature * (9/5) - 459.67) 
        let kelvinToFarenheit = Double(round(10 * kelvinToFarenheitPreDivision/10)) 
        self._currentTemp = kelvinToFarenheit 
        print(self._currentTemp) 
       } 
      } 
     } 
     completed() 
    } 
} 

此代碼工作正常。但是,當我在文本字段中添加新值時,我的URL不會更新。

回答

2

您不在任何地方更新URL。將其更改爲可變爲var WEATHER_URL = BASE_URL + CityName.sharedInstance.cityName + API_Key,然後在您的searchButtonTapped()函數中更新。

@IBAction func searchButtonTapped(_ sender: Any) { 
    CityName.sharedInstance.cityName = cityNameTextField.text! 
    print(CityName.sharedInstance.cityName) 
    WEATHER_URL = BASE_URL + CityName.sharedInstance.cityName + API_Key 
    networkConnection.getWeatherDetails { 
     self.currentTempLabel.text = String(self.networkConnection.currentTemp) 
     self.minTempLabel.text = String(self.networkConnection.minTemp) 
     self.maxtTempLabel.text = String(self.networkConnection.maxTemp) 
    } 
} 

此外,你應該使用SWIFT命名約定每個變量(weatherUrl,的baseUrl,apiKey)的。