跳至主要内容

博文

目前显示的是 2023的博文

PromiseKit 使用教程

 原文链接 PromiseKit 大家都在项目中见过,是典型的一看就会,一用就废的技术。写 PromiseKit 代码想必大家都经历过如下图的错误支配的恐惧。 通过本文,让我们深入浅出重新认识 PromiseKit。 概念考古 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了 Promise 对象。 所谓 Promise ,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。 Promise 对象有以下两个特点: 对象的状态不受外界影响。 Promise 对象代表一个异步操作,有三种状态: pending (进行中)、 fulfilled (已成功)和 rejected (已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是 Promise 这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。 一旦状态改变,就不会再变,任何时候都可以得到这个结果。 Promise 对象的状态改变,只有两种可能:从 pending 变为 fulfilled 和从 pending 变为 rejected 。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对 Promise 对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。 有了 Promise 对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外, Promise 对象提供统一的接口,使得控制异步操作更加容易。 PromiseKit Promise 是对异步操作的封装。状态固定。Promise 对异步返回的结果与错误进行了封装。 PromiseKit 是 Max Howell(brew 作者)小而美的作品。PromiseKit 为 Swift 带来了 ...

如何在模块化/组件化项目中实现 ObjC-Swift 混编?

 原文链接 目录 基础准备工作 在一个 App Target 内部混编 在一个 Framework Target 中混编 踩坑之旅 项目背景 静态库子工程的集成 静态链接问题 动态链接问题 ABI Stability 和 Always Embed Swift Standard Library  选项 当模块化/组件化项目遇到 Swift 静态库 ObjC 模块调用 Swift 模块 Swift 模块调用 Swift 模块 Module Stability Swift 模块调用 ObjC 模块 LLVM Module 和 Umbrella Header 调试问题 总结 一、基础准备工作 在正式开始实践 Swift-ObjC 混编之前,我们有一些问题是绕不过去的,比如: Swift 和 ObjC 混编,我们怎么开始?官方文档有相关的介绍吗? 在模块化/组件化的项目中,Swift 和 ObjC 怎么混编? 业界中已经开始 Swift-ObjC 混编的项目,他们是怎么做的? 我们的现状如何,针对这些已有的经验需要做哪些考量?我们应该怎么做? 如果在现有的 ObjC 项目中引入 Swift,会带来哪些影响?在哪些方面会有限制? … 在 Apple 的 官方文档 中有关于 Language Interoperability 的详细介绍,主要是从 ObjC 迁移到 Swift 的角度来描述的,总结下来主要是以下三点: 如何调整项目中现有的 ObjC 和 C 代码的 API,以提供给 Swift 调用,比如添加 nullability 相关的宏和关键字,添加 Swift API 别名等等 各种基础数据类型在 Cocoa Framework 与 Swift 之间的转换关系 如何在 Swift 代码中调用 ObjC 代码,以及如何在 ObjC 代码中调用 Swift 代码 这里我们重点关注的是 如何实现 Swift 代码和 ObjC 代码的相互调用 。 1. 在一个 App Target 内部混编 如果是在一个 App Target 内部混编的话,当我们在 ObjC 项目中新建 Swift 文件时或者在 Swift 项目中新建 ObjC 文件时,Xcode 都会自动帮你新建一个  Objective-C bridging header file (当然我们也...