这是我的代码:
import UIKit
struct Payment: Decodable {
let salonvo:Bool
}
class ViewController: UIViewController {
@IBOutlet weak var paidInd: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let jsonUrlString = "http://www.repdeputy.com/payment.php"
guard let url = URL(string: jsonUrlString) else { return }
URLSession.shared.dataTask(with: url) { (data, response, err) in
//perhaps check err
//also perhaps check response status 200 OK
guard let data = data else { return }
do {
let payment = try JSONDecoder().decode(Payment.self, from: data)
print(payment.salonvo)
} catch let jsonErr {
print("Error serializing json:", jsonErr)
}
}.resume()
}
}
我需要将“ payment.salonvo”设置为一个变量,我可以在do {}内对其进行操作,并可以在常规ViewDidLoad函数中进行访问。这可能吗?
答案 0 :(得分:1)
您正在将付款设置为出租,并且在 do 内部定义,因此无法在外部访问。
因此,我将在 paidInd 旁边创建一个变量,例如var payment:Payment? = nil
。然后稍后在 do 内部,使用Payment =(删除租借)。
然后,您可以创建一个方法来测试nil是否设置了 salonvo Bool。 (最好在var付款声明中使用DidSet {}。)
答案 1 :(得分:0)
因为api调用是异步的,所以您不能操纵/使用onCommitCompletion
直到响应返回为止;如果bool值与UI更改有关,那么您必须使用activityIndicator或类似的方法使显示变暗,直到响应返回,然后将其移至完成