iOS RunLoop

2023-04-22  本文已影响0人  迷路的小小

swift Concurrent 异步编程

使用RunLoop模拟await/async

  1. 耗时操作
func consuming(_ complete: @escaping (Int) -> Void) {
    DispatchQueue.global().asyncAfter(deadline: .now() + 30) {
        complete(100)
    }
}
  1. 模拟await/async
func imitate() -> Result<Int, Error> {
    var result: Result<Int, Error> = .failure(NSError(domain: "error", code: 200))
    let runLoop = RunLoop.current
    let port = Port()

    consuming { code in
        result = .success(code)
        CFRunLoopStop(runLoop.getCFRunLoop())
    }
    runLoop.add(port, forMode: .default)
    runLoop.run(mode: .default, before: Date().addingTimeInterval(2))
    return result
}
上一篇 下一篇

猜你喜欢

热点阅读