Swift Alamofire和PromiseKit返回承诺<;[T] >;
我使用Alamofire和PromiseKit作为单独的Cocoapod安装。我可以使用Alamofire检索JSON数据,但在配置PromiseKit时收到以下错误。下面的错误出现在“完成,拒绝”所在的行中 错误消息:上下文闭包类型“(解析器)->Void”需要1个参数,但闭包正文中使用了2个参数 我在模拟器内部使用Xcode 9.2和IOS 11.2。提前感谢您的建议Swift Alamofire和PromiseKit返回承诺<;[T] >;,swift,alamofire,promisekit,Swift,Alamofire,Promisekit,我使用Alamofire和PromiseKit作为单独的Cocoapod安装。我可以使用Alamofire检索JSON数据,但在配置PromiseKit时收到以下错误。下面的错误出现在“完成,拒绝”所在的行中 错误消息:上下文闭包类型“(解析器)->Void”需要1个参数,但闭包正文中使用了2个参数 我在模拟器内部使用Xcode 9.2和IOS 11.2。提前感谢您的建议 func wantToReturnAnArrayOfActor() -> Promise<[Acto
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{
返回承诺{履行,拒绝
请求(apirl.url.rawValue).responseJSON{(响应)在
开关(response.result)
{
case.success(让responseString):打印(“我的响应字符串=\(responseString)”)
让actorResponse=ActorApiResponse(JSONString:\(responseString)//将所有数据转换为ActorApiResponse模型类
完成时返回(完成:actorResponse)
DispatchQueue.main.async{
打印(“actorResponse=\(字符串(描述:actorResponse)))
}
case.failure(let error):打印(“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)
}
}
}
}
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)")
}
Sandeep,非常感谢您的回复!我正在使用ObjectMapper将JSON数据与我的模型相关联。我可以通过print()看到数据,但我收到了以下错误:error Domain=NSCocoaErrorDomain Code=3840“字符6附近的对象中的值没有字符串键。”UserInfo={NSDebugDescription=字符6附近的对象中的值没有字符串键。}