如何创建可以在代码中的任何位置进行操作和访问的变量?

时间:2018-07-11 19:17:03

标签: ios swift

这是我的代码:

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函数中进行访问。这可能吗?

2 个答案:

答案 0 :(得分:1)

您正在将付款设置为出租,并且在 do 内部定义,因此无法在外部访问。

因此,我将在 paidInd 旁边创建一个变量,例如var payment:Payment? = nil。然后稍后在 do 内部,使用Payment =(删除租借)。

然后,您可以创建一个方法来测试nil是否设置了 salonvo Bool。 (最好在var付款声明中使用DidSet {}。)

答案 1 :(得分:0)

因为api调用是异步的,所以您不能操纵/使用onCommitCompletion直到响应返回为止;如果bool值与UI更改有关,那么您必须使用activityIndi​​cator或类似的方法使显示变暗,直到响应返回,然后将其移至完成