Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.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中Java接口回调的等价物_Java_Ios_Swift - Fatal编程技术网

iOS Swift中Java接口回调的等价物

iOS Swift中Java接口回调的等价物,java,ios,swift,Java,Ios,Swift,我试图找到一种方法来处理Swift中的异步网络请求。我的计划是在它们自己的类中隔离这些调用,因此我需要一种处理回调的方法。在安卓系统中,我使用界面执行以下操作: apiService.fetch(data, new Callback() { @Override public void onResponse(Response r) { // success } @Override public void onFailure(Error e)

我试图找到一种方法来处理Swift中的异步网络请求。我的计划是在它们自己的类中隔离这些调用,因此我需要一种处理回调的方法。在安卓系统中,我使用
界面执行以下操作:

apiService.fetch(data, new Callback() {
    @Override
    public void onResponse(Response r) {
        // success
    }

    @Override
    public void onFailure(Error e) {
        // error
    }
});

有人能告诉我在Swift 3中如何处理类似的问题吗?谢谢

可以有多个完成处理程序。下面是一个简短的例子:

func request(url:String, success:@escaping(Any) -> Void, failure:@escaping(Any?) -> Void)
{
    let task = URLSession.shared.dataTask(with: URL.init(string: url)!) { (data, response, error) in
        if let responseError = error
        {
            failure(responseError)
        }
        else if let responseData = data  //Make additional checks if there is an error
        {
            success(responseData)  //Call when you are sure that there is no error
        }
        else
        {
            failure(nil)
        }
    }
    task.resume()
}
用法示例:

self.request(url: "https://jsonplaceholder.typicode.com/posts", success: { (data) in
        //Do if success
    }) { (error) in
        //Do if error
    }

可以有多个完成处理程序。下面是一个简短的例子:

func request(url:String, success:@escaping(Any) -> Void, failure:@escaping(Any?) -> Void)
{
    let task = URLSession.shared.dataTask(with: URL.init(string: url)!) { (data, response, error) in
        if let responseError = error
        {
            failure(responseError)
        }
        else if let responseData = data  //Make additional checks if there is an error
        {
            success(responseData)  //Call when you are sure that there is no error
        }
        else
        {
            failure(nil)
        }
    }
    task.resume()
}
用法示例:

self.request(url: "https://jsonplaceholder.typicode.com/posts", success: { (data) in
        //Do if success
    }) { (error) in
        //Do if error
    }

有很多类似的问题。你可以使用非常有用的链接。谢谢顺便问一下,你知道一个函数是否可能有多个CompletionHandler吗?i、 一个代表成功,一个代表失败。我可以传回一个可以处理这两种情况的对象——只是想知道它是否possible@Harry为了完整性起见,可能值得一提的是,这种模式在Swift/ObjC中是可能的,用不同的术语进行思考。接口称为协议,服务于此目的的协议(通过代表您调用的方法接收回信息)通常称为委托。你可以使用非常有用的链接。谢谢顺便问一下,你知道一个函数是否可能有多个CompletionHandler吗?i、 一个代表成功,一个代表失败。我可以传回一个可以处理这两种情况的对象——只是想知道它是否possible@Harry为了完整性起见,可能值得一提的是,这种模式在Swift/ObjC中是可能的,用不同的术语进行思考。接口称为协议,用于此目的的协议(通过代表您调用的方法接收回信息)通常称为委托。您不应该检查
nil
data==nil
),而只是强制展开(
数据!
)。改用条件绑定。一旦你们改进了你们的答案,我就会投票。你们说得对,条件绑定是一个更干净的解决方案,所以我编辑了我的答案。这个问题的重点是完成处理程序,所以我只给出了一个如何检查错误的简短示例,即从何处开始。这并不意味着我们会失去对其他重要事情的关注,比如正确处理选项。你不应该检查
nil
data==nil
),而只是强制展开(
数据!
)。改用条件绑定。一旦你们改进了你们的答案,我就会投票。你们说得对,条件绑定是一个更干净的解决方案,所以我编辑了我的答案。这个问题的重点是完成处理程序,所以我只给出了一个如何检查错误的简短示例,即从何处开始。这并不意味着我们会失去对其他重要事情的关注,比如正确处理期权