gpt4 book ai didi

swift - Alamofire 和 PromiseKit 返回 Promise<[T]>

转载 作者:行者123 更新时间:2023-11-30 11:37:13 25 4
gpt4 key购买 nike

我使用 Alamofire 和 PromiseKit 作为单独的 Cocoapod 安装。我可以使用 Alamofire 检索 JSON 数据,但在配置 PromiseKit 时收到以下错误。在“fulfill,reject”所在行中出现以下错误。

错误消息:上下文闭包类型“(Resolver<_>) -> Void”需要 1 个参数,但闭包主体中使用了 2 个参数

我在模拟器中使用 Xcode 9.2 和 IOS 11.2。感谢您提前的建议!

      func wantToReturnAnArrayOfActor() -> Promise<[Actor]> {
return Promise { fulfill, reject in
Alamofire.request(ApiUrl.url.rawValue).responseJSON { (response) in
switch(response.result)
{
case .success(let responseString): print("my response string = \(responseString)")
let actorResponse = ActorApiResponse(JSONString: "\(responseString)")//converts all of the data into the ActorApiResponse model class
return when(fulfilled: actorResponse)
DispatchQueue.main.async {
print("actorResponse = \(String(describing: actorResponse))")
}

case .failure(let error): print("alamofire error = \(error)")

}
}

}
}

最佳答案

如果是这样的话,

func wantToReturnAnArrayOfActor() -> Promise<[Actor]> {

return Promise() { resolver in

Alamofire.request(ApiUrl.url.rawValue).responseJSON { (response) in
switch(response.result)
{
case .success(let responseObject):
let actorResponse = ActorApiResponse(jsonObject: responseObject)
let actors = actorResponse.getActors()
resolver.fulfill(actors)

case .failure(let error):
resolver.reject(error)

}
}

}
}

Promise 的初始化闭包接受单个参数,其类型为 Resolver,这就是您的错误所说的内容。然后,您希望在 Promise 执行完成时使用 [Actor] 类型的结果来解析您的 Promise,或者如果在执行过程中发生错误则拒绝并返回错误。

这里有几点需要注意:

  • Alamofire.request(_).responseJSON 返回 json 对象而不是 json 字符串。
  • 如果您的ActorApiResponse是将json转换为[Actor]的对象,您应该有适当的方法将json对象转换为实际数据类型,即。 [ Actor ]。

你可以让你的ActorApiResponse像这样,

struct ActorApiResponse {
init(jsonObject: Any) {

}

func getActors() -> [Actor] {
// calculate and return actors
return []
}
}

然后,您可以从其他地方调用它,

    wantToReturnAnArrayOfActor().done {
// do something with [Actor here]
// You can also chain the multiple promise using .then instead of using done
}.catch { error in
print("Error occurred \(error)")
}

关于swift - Alamofire 和 PromiseKit 返回 Promise<[T]>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49617019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com