ios – Swift – 方法链接

ios – Swift – 方法链接,第1张

概述我想在我的快速代码中实现方法链,可能是Alamofire方法.例如,如果我必须使用我的功能,如下所示 getListForID(12).Success { // Success block}. Failure { // Failure block} 我如何创建函数getListForID? 为了扩展 @dasblinkenlight和 @Sulthan所做的重点 – 这里是一个小例 我想在我的快速代码中实现方法链,可能是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{
func doRequest(input:input) -> ResultHandler {    let resultHandler = ResultHandler()    doSomethingAsynchronous(resultHandler.invokeCallbacks)    return resultHandler}
(output)} case .Failure: _failures.forEach{
doRequest(input).success {result in    print("success,with:",result)}.failure {    print("fail :(")}
()} } } // 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方法:

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

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

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

总结

以上是内存溢出为你收集整理的ios – Swift – 方法链接全部内容,希望文章能够帮你解决ios – Swift – 方法链接所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1105312.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存