类变量分配在 Alamofire 请求块中不起作用

Posted

技术标签:

【中文标题】类变量分配在 Alamofire 请求块中不起作用【英文标题】:Class variable assignment is not working inside a Alamofire request block 【发布时间】:2019-05-16 17:08:41 【问题描述】:

我正在尝试将 Alamofire 请求结果分配给 TableView 类变量。

我意识到当我在Alamofire 请求块中使用 self.notifications 变量时,它可以工作。但是当我在Alamofire 之外调用 self.notifications 时,它是 nil 并且 self.notifications 不是通过引用分配的。好像是复制变量

class NotificationsTableView: UITableViewController

    var notifications: Notification!
    let uri = Helper.URLDEV + "/api_x/notifications/"
    override func viewDidLoad() 
        super.viewDidLoad()

        tableView.cellLayoutMarginsFollowReadableWidth = true
        self.tableView.delegate = self
        self.tableView.dataSource = self
        print("Table loaded")
        let auth_code = ["Authorization": "Token " + Helper.getMyToken() ]
        Alamofire.request(self.uri, parameters: nil, encoding: URLEncoding.default, headers: auth_code).responseJSON  response in
            guard let data = response.data else  return 
            do 
                let decoder = JSONDecoder()
                //This is working properly
                self.notifications = try decoder.decode(Notification.self, from: data)
                print(self.notifications?.results?[2].notificationData?.body ?? 999)

             catch let error 
                print(error)
            
        
        print("URI: \(uri)")
        //Here is just nil, if I didn't assign a value before
        print(self.notifications == nil)

我希望 self.notifications 在Alamofire 请求之后不会为零

【问题讨论】:

这是任何异步调用背后的逻辑,你需要从 Alamofire 回调开始旅程 【参考方案1】:

alamofire 响应中的代码将在从 URL 接收到一些响应时执行。在这里,执行指针不会等待该响应,因为它是异步回调,并将继续执行下一条语句。所以它将首先在 Alamofire 之外执行语句,并且由于它没有使用任何值初始化,它将为 nil,并且在收到一些响应后,将一些值分配给类变量。

下面的链接将能够让您了解异步代码

https://medium.com/ios-os-x-development/managing-async-code-in-swift-d7be44cae89f

【讨论】:

谢谢@BhargavR,这是开始理解异步代码的好点【参考方案2】:

最后,使用 repo 中的 Alamofire 同步解决了问题,甚至使用更简洁的代码。

【讨论】:

以上是关于类变量分配在 Alamofire 请求块中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

负载分配在 Kubernetes 中不起作用,请求将发送到单个 pod

带有 MultiPart 表单数据中的参数的图像上传在 Alamofire 4.0 中不起作用

JSON stringify 中的变量在 Rest 请求中不起作用

Alamofire 超时不起作用

为啥将命令输出定向到变量在批处理文件中不起作用

动画在 api 响应成功回调中不起作用