首页 > 其他分享 >Swift asyns 封装思路

Swift asyns 封装思路

时间:2024-08-08 22:39:56浏览次数:7  
标签:Task 封装 seconds asyns task mainTask escaping Swift

Aynscs.swift

public typealias Task = () -> Void

public struct Aynscs {
    
    // 异步
    public static func asyns(task: @escaping Task) {
        _asyns(task: task)
    }
    
    // 异步完成 -> 同步
    public static func asyns(task: @escaping Task, mainTask: @escaping Task) {
        _asyns(task: task, mainTask: mainTask)
    }
    
    private static func _asyns(task: @escaping Task, mainTask: Task? = nil) {
        let item = DispatchWorkItem(block: task)
        
        if let main = mainTask {
            item.notify(queue: .main, execute: main)
        }
    }
    
    // 异步延迟
    // 可取消 item.cancel()
    public static func asynsDelay(seconds: Double, task: @escaping Task) -> DispatchWorkItem {
        return _asynsDelay(seconds: seconds, task: task)
    }
    
    // 异步延迟 -> 同步
    // 可取消 item.cancel()
    public static func asynsDelay(seconds: Double, task: @escaping Task, mainTask: @escaping Task) -> DispatchWorkItem {
        return _asynsDelay(seconds: seconds, task: task, mainTask: mainTask)
    }
    
    private static func _asynsDelay(seconds: Double, task: @escaping Task, mainTask: Task? = nil) -> DispatchWorkItem {
        let item: DispatchWorkItem = DispatchWorkItem(block: task)
        DispatchQueue.global().asyncAfter(deadline: DispatchTime.now() + seconds, execute: task)
        
        if let main = mainTask {
            item.notify(queue: .main, execute: main)
        }
        
        return item
    }
    
    
}

使用

Aynscs.asyns(task: {
     // 异步操作
})

Aynscs.asyns(task: {
     // 异步操作
}, mainTask: {
     // 异步完成后进行同步操作
})

标签:Task,封装,seconds,asyns,task,mainTask,escaping,Swift
From: https://www.cnblogs.com/IT-IOS-MAN/p/18349864

相关文章

  • Swift 优雅的 Enum
    声名EnumenumColor{staticfuncRGB(r:CGFloat,g:CGFloat,b:CGFloat)->UIColor?{UIColor(red:r/255.0,green:g/255.0,blue:b/255.0,alpha:1)}staticfuncRGBA(r:CGFloat,g:CGFloat,b:CGFloat,a:CGFloat)->UIColor?......
  • react中封装Echarts
    下载npxcreate-react-appmy-echarts创建公共组件importReact,{useState,useEffect,useMemo}from'react';import*asechartsfrom"echarts";constEChartsComponent=({option})=>{const[echartsInstance,setEchartsInstance]=u......
  • Swift 引用 OC 的类库
    1、创建引用文件///{项目名称}-Bridging-Header.hXQTest-Bridging-Header.h2、创建OC类@interfaceAuth:NSObject@property(nonatomic,assign)NSIntegercode;@property(nonatomic,strong)NSString*name;-(instancetype)initWithCode:(NSInteger)codename:......
  • vue中axios二次封装【简洁、附代码】+api解耦
    reference:https://www.bilibili.com/video/BV1my421h7hK/?share_source=copy_web&vd_source=334dbcc5ec1e90276a3fca594c89e11e下一篇:继axios二次封装后跨域问题解决——配置代理、环境变量文章目录一、axios请求接口1下载2引入3使用二、axios二次封装1.下......
  • 重学面向对象-基础篇03封装、继承和多态
    封装、继承和多态基础概念封装:把对象的属性和方法结合城一个独立的整体,隐藏实现细节,并提供对外访问的接口继承:从已知的一个类中派生出一个新的类,叫子类。子类实现了父类所有非私有化的属性和方法,并根据实际需求扩展出新的行为多态:多个不同的对象对同一消息作出响应,同一消息根......
  • 如何把Connection 封装到工具类里面 调用工具类方法实现 增删改查操作 java JDBC
    如何把Connection封装到工具类里面调用工具类方法实现增删改查操作javaJDBC使用数据库连接池以HikariCP为例在JDBC中,使用数据库连接池是一个常见的做法,以提高数据库操作的效率和性能。连接池管理着一组数据库连接,这些连接可以被重用而不是每次需要时都创建新的连接。......
  • 如何把Connection 封装到工具类里面 调用工具类方法实现 增删改查操作 java JDBC使用
    如何把Connection封装到工具类里面调用工具类方法实现增删改查操作javaJDBC使用C3P0数据库连接池答:当使用C3P0作为数据库连接池时,你可以按照类似的模式来配置和使用它。以下是一个示例,展示了如何在Java项目中配置C3P0连接池,并创建一个工具类来管理数据库连接和执行基本的......
  • 什么是封装
    类与类之间的关系1.继承:一个类(子类)继承另一个类(父类)的属性和方法。publicclassParent{publicvoidparentMethod(){//父类方法}}publicclassChildextendsParent{publicvoidchildMethod(){//子类方法}}2.实现:一......
  • 【日常开发】 java返回ECharts数据结构封装
    java返回ECharts数据结构封装一、前端页面示例图如下:二、准备测试数据:三、后端格式封装代码:四、最终结果:......
  • 统一返回封装类ResponseResult
    统一返回封装类ResponseResult1、ResponseResult/***@author:yc*@des:统一返回封装类*@date:2024/08/0714:08*/@Data@NoArgsConstructorpublicclassResponseResult<T>{/***请求时间*/privateStringrequestTime;......