微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – Swift – 方法链接

我想在我的快速代码实现方法链,可能是Alamofire方法.例如,如果我必须使用我的功能,如下所示
getListForID(12).Success {
   // Success block
}. Failure {
   // Failure block
}

我如何创建函数getListForID?

解决方法

为了扩展 @dasblinkenlight@Sulthan所做的重点 – 这里是一个小例子,说明如何使用您想要的方便语法实现请求函数以成功和失败关闭.

首先,您必须定义一个新类来表示“结果处理程序”.这就是您的成功和失败函数将传递的内容,允许您添加多个尾随闭包以构成完成块逻辑.你会希望它看起来像这样:

class ResultHandler {

    typealias SuccessClosure = RequestHandler.Output->Void
    typealias FailureClosure = Void->Void

    // the success and failure callback arrays
    private var _successes = [SuccessClosure]()
    private var _failures = [FailureClosure]()

    /// Invoke all the stored callbacks with a given callback result
    func invokeCallbacks(result:RequestHandler.Result) {

        switch result {
            case .Success(let output): _successes.forEach{$0(output)}
            case .Failure: _failures.forEach{$0()}
        }
    }

    // remove all callbacks – Could call this from within invokeCallbacks
    // depending on the re-usability of the class
    func removeAllCallbacks() {
        _successes.removeAll()
        _failures.removeAll()
    }

    /// appends a new success callback to the result handler's successes array
    func success(closure:SuccessClosure) -> Self {
        _successes.append(closure)
        return self
    }

    /// appends a new failure callback to the result handler's failures array
    func failure(closure:FailureClosure) -> Self {
        _failures.append(closure)
        return self
    }
}

这将允许您定义要在完成时执行的多个成功或失败闭包.如果您实际上不需要多个闭包的容量,那么您可以通过剥离数组来简化类 – 并且只是跟踪最后添加的成功和失败完成块.

现在,您所要做的就是定义一个函数,该函数生成一个新的ResultHandler实例,然后执行给定的异步请求,并在完成时调用invokeCallbacks方法

func doRequest(input:Input) -> ResultHandler {
    let resultHandler = ResultHandler()
    doSomethingAsynchronous(resultHandler.invokeCallbacks)
    return resultHandler
}

现在你可以像这样调用它:

doRequest(input).success {result in
    print("success,with:",result)
}.failure {
    print("fail :(")
}

唯一需要注意的是你的doSomethingAsynchronous函数必​​须将其完成块调度回主线程,以确保线程安全.

完整项目(添加使用示例):https://github.com/hamishknight/Callback-Closure-Chaining

原文地址:https://www.jb51.cc/iOS/334561.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐