SwiftUI 问答之在 通过闭包获取数组Alamofire

实战需求

我正在学习网络(Alamofire)。在他关于 Viper 架构的宠物项目中。我正在发出获取请求并从本地服务器获取待办事项列表。数据成功返回给我。但我就是不知道如何获取它们并将它们转移到 Interactor ……

我希望我的fetchToDos方法返回一个数组。但我一直在犯错误。

func fetchToDos() -> [ToDo]? { // <- My mistake is clearly here

    let request = Session.default.request("http://localhost:3003/")

    request.responseDecodable(of: ToDos.self) { (response) in

        switch response.result {
        case .success(let tasks):
            print("SUCCESS to FETCH JSON: \(tasks)")
        case .failure(let error):
            print("FAILED to FETCH JSON: \(error.localizedDescription)")
        }

    }

}

解决方案

您正在使用异步函数,因此在完成后从中获取某些内容的一种方法是使用完成处理程序,如下所示:(注意您需要进行错误检查等…然后才能使用这是真的)

class ToDoNetworking {

    func fetchToDos(completion: @escaping ([ToDo] -> Void)) { // <- try this
        let request = Session.default.request("http://localhost:3003/")
        request.responseDecodable(of: [ToDos].self) { (response) in

            switch response.result {
            case .success(let tasks):
                print("SUCCESS to FETCH JSON: \(tasks)")
                completion(tasks) // <-- assuming tasks is [ToDo]
            case .failure(let error):
                print("FAILED to FETCH JSON: \(error.localizedDescription)")
                completion([])
            }
        }
    }
}

精品教程推荐


加入我们一起学习SwiftUI

QQ:3365059189
SwiftUI技术交流QQ群:518696470
教程网站:www.openswiftui.com

发表回复