Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IOS SWIFT-服务调用完成获取时返回响应数据_Ios_Swift_Asynchronous_Service_Return - Fatal编程技术网

IOS 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()

我有一个用json返回响应的web服务。 我为iphone的xcode(swift)中的数据访问创建了一个单独的类。 我要做的是调用数据访问层中的函数,当获取完成时,该函数返回响应字典。
问题:如何仅在从服务获取完成时返回。
例如:学生表->点击学生->获取学生数据->获取完成后返回数据

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