iOS RunLoop

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
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录 -RunLoop的概念 -RunLoop逻辑与实现 -RunLoop在iOS中运用 -RunLoop实践 -...
    StarkShen阅读 6,444评论 6 23
  • 关于 runloop 面试中经常被问到: 讲讲 RunLoop,项目中有用到吗? RunLoop内部实现逻辑? R...
    齐玉婷阅读 298评论 0 1
  • 懵逼 主要聊聊以下内容 1 Runloop基本概要 2 Runloop与定时器 3 Runloop常驻线程 4 R...
    iOS弗森科阅读 643评论 0 12
  • 概述 RunLoop作为iOS中一个基础组件和线程有着千丝万缕的关系,同时也是很多常见技术的幕后功臣。尽管在平时多...
    sumrain_cloud阅读 960评论 0 5
  • Runloop是iOS和OSX开发中非常基础的一个概念,从概念开始学习。 RunLoop的概念 -般说,一个线程一...
    小猫仔阅读 1,025评论 0 1