我做了一个委托,将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)
}