swift - 无法更改闭包中的结构实例值

标签 swift

<分区>

我有一个名为 users 的结构实例,我通过闭包将 JSON 解析到这个实例中,但我发现我的编辑根本没有保存。所以当我离开闭包范围时,我就没有了。有人知道如何捕获闭包中的值(value)吗?

var users: [User]! = [User]()

override func viewDidLoad() {
        super.viewDidLoad()

        Alamofire.request(url2).responseJSON { response in
            switch response.result {
            case .success(let value):
                guard let jsonArray = value as? [[String: Any]] else { return }
                self.users = jsonArray.compactMap(User.init)
                print(self.users!) // works
            case .failure(let error):
                print(error)
            }
        }

        print(users!) // error because I had nil
}

最佳答案

提出请求需要时间。为避免整个应用程序卡住,请求在后台发送并且程序继续执行,即使它尚未收到服务器的响应也是如此。

解决此问题的方法是在数据加载后在回调中调用一个单独的函数。这可能如下所示:

var users: [User]! = [User]()

override func viewDidLoad() {
        super.viewDidLoad()

        Alamofire.request(url2).responseJSON { response in
            switch response.result {
            case .success(let value):
                guard let jsonArray = value as? [[String: Any]] else { return }
                self.users = jsonArray.compactMap(User.init)
                print(self.users!) // works

                // call function here!
                self.usersLoaded()
            case .failure(let error):
                print(error)
            }
        }
}

func usersLoaded() {
        print(users!)
}

关于swift - 无法更改闭包中的结构实例值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55519959/

相关文章:

ios - 停止从 ScrollView 内的字段自动缩放

swift - 使用结构构建端点

swift - 如何使用静态初始化变量重构此代码?

ios - Swift 中的内存管理 : memory don't released after NSOperation ends

swift - Realm Swift 子类化

swift - 如何使 Swift NSComboBox 每行从多维数组返回一个数组

ios - 我是否应该始终在 viewDidDisappear() 中删除 Firebase 监听器?

swift - RxSwift 与 BehaviorRelay 的双向绑定(bind) <Any?>

ios - CoreBluetooth 扫描特定服务

swift - 无法操作位于不同 ViewController 上的 AVAudioPlayer