通过闭包获取数组。 Swift

Get an array through a closure. Swift

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

我希望我的 fetchToDos 方法能够 return 一个数组。但是我一直在犯错误。

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)")
        }

    }

}

网络调用返回的数据类型是什么?如果它是一个 ToDo 对象数组并且你的 ToDo 对象支持 Codable,那么你可能想要:

request.responseDecodable(of: [ToDo].self)

您传入要解码的对象类型,听起来像是一个 ToDo 对象数组,因此 [ToDo].self

你正在使用一个异步函数,所以有一种方法可以得到一些东西 当它完成时,它的一部分是使用完成处理程序,如下所示: (注意你需要做错误检查等......在你真正使用它之前)

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([])
            }
        }
    }
}