IOS SWIFT-服务调用完成获取时返回响应数据
我有一个用json返回响应的web服务。 我为iphone的xcode(swift)中的数据访问创建了一个单独的类。 我要做的是调用数据访问层中的函数,当获取完成时,该函数返回响应字典。IOS SWIFT-服务调用完成获取时返回响应数据,ios,swift,asynchronous,service,return,Ios,Swift,Asynchronous,Service,Return,我有一个用json返回响应的web服务。 我为iphone的xcode(swift)中的数据访问创建了一个单独的类。 我要做的是调用数据访问层中的函数,当获取完成时,该函数返回响应字典。 问题:如何仅在从服务获取完成时返回。 例如:学生表->点击学生->获取学生数据->获取完成后返回数据 func getUser(userID:String)->NSDictionary{ let manager = AFHTTPRequestOperationManager()
问题:如何仅在从服务获取完成时返回。
例如:学生表->点击学生->获取学生数据->获取完成后返回数据
func getUser(userID:String)->NSDictionary{
let manager = AFHTTPRequestOperationManager()
let parameters = ["uid":userID]
manager.POST(urlStudentInfo, parameters: parameters,
success: {(operation: AFHTTPRequestOperation!,responseObject: AnyObject!) in
print("JSON success: " + responseObject.description)
if let responseDic = responseObject as? NSDictionary{
let isUser = responseDic["status"] as! Bool
if isUser{
}else{
}
}
},
failure: { (operation: AFHTTPRequestOperation!,error: NSError!) in
})
return response
}
这是我的功能结构。问题是在返回完成后会发生回迁。所以回报总是零
有人建议只在抓取完成后返回吗?您的
{callService}
实际上是什么样子的?它是否有一个完成处理程序?但是一般来说,像webservices这样的异步函数不能像普通函数那样考虑,您需要在一个函数中启动ws-call,然后调用另一个函数,让完成处理程序知道它的完成,或者让ws-function知道它的完成。因此,简而言之,您不应该尝试从该函数返回任何内容,而是从完成处理程序返回值
编辑:
我建议不要使用NSNotifications,而是委托回调,或者直接使用完成处理程序中的数据。但是,任何试图使用该返回的NSDictionary的对象都应该是该函数所在类的委托(如果不知道它是如何工作的,请查阅协议教程),然后可以通过完成处理程序中的委托回调将该字典传递回(想想uitableview是如何让您实现所有这些功能的,您需要为您的webservice调用做一些类似的事情)
可能有助于您理解我的意思因为您调用的是异步方法,所以不应尝试立即返回值。相反,请提供一个“完成处理程序”闭包,以便在稍后返回结果时调用 我还建议至少使用AFNetworking 3.x(因为AFNetworking 2.x的
AFHTTPRequestOperationManager
使用了NSURLConnection
,现在已经被弃用):
你可以这样称呼它:
getUser(userID) { responseDictionary, error in
guard responseDictionary != nil && error == nil else {
print(error)
return
}
// do something with responseDictionary here
}
// but do not try to use responseDictionary here, because the above runs asynchronously
或者,甚至更好,你可以考虑使用.A/P>请具体说明{CalService }更新{CalService } PARTYES,我在服务中有完整的处理程序。我尝试用NSnEnter。这样我就可以在对象中发送响应。但是这需要处理3个状态。(success services accessible,failure Error Parameters,failure service not accessible)在一个服务呼叫中,我访问了很多服务。因此,始终使用这些服务是不可行的,因为我必须为许多呼叫使用列表器。很高兴听到,可以将答案标记为已解决,然后我可能会用我的评论内容更新答案
getUser(userID) { responseDictionary, error in
guard responseDictionary != nil && error == nil else {
print(error)
return
}
// do something with responseDictionary here
}
// but do not try to use responseDictionary here, because the above runs asynchronously