OpenCombine
Apple 的 Combine 框架的开放源代码实现,用于处理时间内的值。
本项目的主要目标是提供一个兼容、可靠且高效的实现,可以在 macOS 10.15 和 iOS 13 以前的 Apple 操作系统以及 Linux 和 Windows 上使用。
本项目处于早期开发阶段。
安装
OpenCombine
包含两个公共目标:OpenCombine
和 OpenCombineDispatch
(第三个,COpenCombineHelpers
被认为私有。不要将其导入到您的项目中)。
OpenCombine
本身没有依赖项。甚至没有 Foundation 或 Dispatch。如果您想使用 OpenCombine
与 Dispatch
(例如使用 DispatchQueue
作为操作符如 debounce
、receive(on:)
等)的 Scheduler
),您需要导入 OpenCombine
和 OpenCombineDispatch
。
Swift 包管理器
Swift 包
要将 OpenCombine
添加到您的 SPM 包中,请将 OpenCombine
包添加到 Package.swift
文件中列表的包和目标依赖项中。
dependencies: [
.package(url: "https://github.com/broadwaylamb/OpenCombine.git", from: "0.6.0")
],
targets: [
.target(name: "MyAwesomePackage", dependencies: ["OpenCombine", "OpenCombineDispatch"])
]
Xcode
OpenCombine
也可以直接在您的 Xcode 项目中添加为 SPM 依赖项(需要 Xcode 11 或更高版本)。
要这样做,请打开 Xcode,使用 文件 → Swift 包 → 添加依赖项…,输入 仓库 URL,选择最新可用的版本,并勾选需要的选项。
CocoaPods
要将 OpenCombine
添加到使用 CocoaPods 的项目中,请将 OpenCombine
和 OpenCombineDispatch
添加到您的 Podfile
中目标依赖项列表。
pod 'OpenCombine', '~> 0.6.0'
pod 'OpenCombineDispatch', '~> 0.6.0'
贡献
为了参加工作,您需要 Xcode 10.2 和 Swift 5.0 或更高版本。
请参阅 问题 #1 了解尚未实现的操作符列表,以及 RemainingCombineInterface.swift 文件。后一个文件包含从最新版本的 Xcode 11 生成的苹果的 Combine 界面。当在 OpenCombine 中实现功能时,应从 RemainingCombineInterface.swift 文件中删除。
您可以参考 这个 gist 来观察不同 Xcode (beta) 版本之间苹果的 Combine API 的变化,或参考 此 gist 来查看 Combine 的 .swiftinterface 文件的有关内容。
您可以为苹果的 Combine 运行兼容性测试。为此,您需要一个运行着 macOS 10.14 及以上版本的系统(需要有已安装的 iOS 13 模拟器,因为获取苹果的 Combine 的唯一方式是使用模拟器),或者 macOS 10.15(苹果的 Combine 与操作系统捆绑在一起)。从包的根目录执行以下命令
$ make test-compatibility
或者启用 Xcode 构建设置中的 -DOPENCOMBINE_COMPATIBILITY_TEST
编译器标志。注意,在 iOS 上只有后者才能工作。
请注意:在开始开发某些功能之前,请咨询 GitHub 项目,以确保没有人已经在同一功能上取得了进展!如果没有,那么请创建一个草案 PR 以说明您开始工作。
GYB
OpenCombine中有一些发布者(例如Publishers.MapKeyPath
、Publishers.Merge
)存在多种不同的类型,以便支持多种变体。例如,还有Publishers.MapKeyPath2
和Publishers.MapKeyPath3
,它们非常相似但又有所不同,以至于Swift的类型系统在这里无能为力(因为缺乏变通型泛型的支持)。维护这些泛型类的多个实例既费时又容易出错(它们可能会不同步),因此我们使用GYB工具从模板生成这些实例。
GYB是一种Python脚本,可以评估模板文件中编写的Python代码,因此它非常灵活——模板可以是任意复杂的。关于GYB有一篇优秀的文章介绍NSHipster。
GYB是Swift开源项目的一部分,并且可以与Swift本身的相同许可证一起分发。
GYB模板文件扩展名为.gyb
。运行make gyb
从这些模板生成Swift代码。生成的文件前缀为GENERATED-
,并已提交到源代码管理。这些文件绝不能直接编辑。相反,应该编辑.gyb
模板,然后使用make gyb
重新生成这些文件。