// // MODelayTask.swift // MiMoLive // // Created by OneeChan on 2025/10/10. // import Foundation class MODelayTask { // 保存任务实例,用于取消 private static var workItems = NSMapTable.init( keyOptions: .strongMemory, valueOptions: .weakMemory ) /// 执行延时任务(可取消) /// - Parameters: /// - delay: 延时秒数 /// - queue: 执行队列(默认主线程) /// - task: 延时后执行的任务 @discardableResult static func perform(delay: TimeInterval, queue: DispatchQueue = .main, task: @escaping () -> Void) -> String { // 创建任务 let workItem = DispatchWorkItem(block: task) let uuid = UUID().uuidString workItems.setObject(workItem, forKey: uuid as NSString) // 延时执行 queue.asyncAfter(deadline: .now() + delay, execute: workItem) return uuid } /// 取消延时任务 static func cancel(key: String?) { guard let key else { return } guard let task = workItems.object(forKey: key as NSString) else { return } workItems.removeObject(forKey: key as NSString) task.cancel() } }