我的委托没有将我的 JSON 值传递给视图控制器中的 UILabel。



我做了一个委托,将JSON值传递给我的视图控制器,这样我就可以更改两个UILabels,但当我运行应用程序时,标签不会更改。我在这方面已经坚持了很长时间,当我用picker视图更改货币时,我所做的一切都会导致应用程序保持不变。我们将不胜感激。非常感谢。

代表

protocol coinManagerDelegate {
func didUpdateCoin(price: String, currency: String)
func didFailWithError(error: Error)
}    

功能

func performRequest(with Currency: String) {
let stringURL = baseURL + Currency + apiKey
AF.request(stringURL).responseJSON { response in
switch response.result {
case .success(let value):
let json = JSON(value)
if let rate = json["rate"].double {
print(rate)
let totalRate = String(format: "%.2f", rate)
print(totalRate)
self.delegate?.didUpdateCoin(price: totalRate, currency: Currency)
}



case .failure(let error):
self.delegate?.didFailWithError(error: error)
}
}
}

视图控制器

extension ViewController: coinManagerDelegate {
func didFailWithError(error: Error) {
print(error)
}

func didUpdateCoin(price: String, currency: String) {
DispatchQueue.main.async {
self.bitcoinLabel.text = price
self.currencyLabel.text = currency
}
}
}

调用性能请求

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
let selectedCurrency = coinManager.currencyArray[row]
coinManager.performRequest(with: selectedCurrency)
}

您必须在ViewController中设置delegate

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
let selectedCurrency = coinManager.currencyArray[row]
coinManager.delegate = self
coinManager.performRequest(with: selectedCurrency)
}

最新更新