美文网首页
Swift中实现便捷的异步操作

Swift中实现便捷的异步操作

作者: lenbolan | 来源:发表于2021-02-05 19:10 被阅读0次
  1. 定义操作符:
//
//  AsyncTask.swift
// 
//  Created by lenbo lan on 2021/2/5.
//

typealias Action = () -> Void
typealias AsyncTask = (_ act: @escaping Action) -> Void

// 定义优先级
precedencegroup AsyncOperater {
    associativity: left
    higherThan: AssignmentPrecedence
}

// 定义操作符
infix operator +>: AsyncOperater

func +>(left:@escaping AsyncTask, right:@escaping AsyncTask) -> AsyncTask {
    return { complete in
        left {
            right {
                complete()
            }
        }
    }
}
  1. 使用:
       func uploadProfileImage(complete: @escaping Action) {
            AF.upload(multipartFormData: { multipartFormData in
                multipartFormData.append(uploadData, withName: "imgUploader", fileName: "\(filename).jpg", mimeType: "image/jpeg")
            }, to: server_api.upload)
            .uploadProgress { progress in
                print(CGFloat(progress.fractionCompleted)*100)
            }
            .responseJSON { response in
                debugPrint(response)
                switch response.result {
                case .success(let value):
                    let dict = JSON(value)
                    let imageUrl = dict["image"].stringValue
                    print("image url: \(imageUrl)")
                    UserDefaultsManager.shared.profileImageUrl = imageUrl
                
                    // 回调
                    complete()
                case .failure:
                    print("upload image failure")
                    return
                }
            }
        }
        
        func regist(complete: @escaping Action) {
            let parameters = ["name": fullName,
                              "username": username,
                              "email": email,
                              "profileImageUrl": profileImageUrl,
                              "password": password]
            AF.request(server_api.regist, method: .post, parameters: parameters)
                .responseJSON { response in
                    print("Response JSON: \(response.value ?? "")")
                    
                    // 回调
                    complete()
                }
        }
        
        // 执行操作
        let taskRegist = uploadProfileImage +> regist

        taskRegist {
            DispatchQueue.main.async {
                print("sign up complete")
            }
        }
  1. 参考于:

http://www.voidcn.com/article/p-fcxrweyk-ym.html

https://docs.swift.org/swift-book/ReferenceManual/Declarations.html

https://developer.apple.com/documentation/swift/swift_standard_library/operator_declarations

相关文章

  • Swift中实现便捷的异步操作

    定义操作符: 使用: 参考于: http://www.voidcn.com/article/p-fcxrweyk-...

  • Swift Concurrency框架之Async-await

    Swift 5.5 终于为开发者带来了async,await,actor这些便捷的异步语法。为异步编程开发提供简洁...

  • RxJava 基础实现

    1. 定义 RxJava 是一个 基于事件流、实现异步操作的库 2. 作用 实现异步操作类似于 Android中的...

  • Android | AsyncTask基础梳理

    AsyncTask. 异步任务目的:方便后台线程中操作后更新UI封装并简化了异步操作实现:Thread和Hand...

  • AsyncTask和Handler的优缺点比较

    AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提...

  • AsyncTask 使用解析

    背景 AsyncTask 是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作...

  • swift sorted 排序函数

    swift 提供了便捷的快速排序数组、字典的函数 sorted( )所有操作都在 swift 3.0 下完成 1....

  • 前端异步中的async/await

    在前端开发中,经常会遇到异步的情况。异步操作一直是JS中不可或缺的一环。从最开始使用回调函数实现异步操作,到后面的...

  • Swift GCD中取消一个正在执行的Block

    Swift GCD中没有原生支持取消等的操作,这些操作就需要我们自己动手去实现。 在Playground中想要支持...

  • Jhipster 异步操作

    Jhipster版本 4.14.5 注解介绍 在SpringBoot中实现异步操作需要2个注解@EnableAsy...

网友评论

      本文标题:Swift中实现便捷的异步操作

      本文链接:https://www.haomeiwen.com/subject/kpegtltx.html