COpenCombineHelpers 0.6.0

COpenCombineHelpers 0.6.0

ohitsdanielbroadway_lamb 维护。



  • 作者
  • Sergej Jaskiewicz

OpenCombine

CircleCI codecov Language Platform Cocoapods

Apple 的 Combine 框架的开放源代码实现,用于处理时间内的值。

本项目的主要目标是提供一个兼容、可靠且高效的实现,可以在 macOS 10.15 和 iOS 13 以前的 Apple 操作系统以及 Linux 和 Windows 上使用。

本项目处于早期开发阶段。

安装

OpenCombine 包含两个公共目标:OpenCombineOpenCombineDispatch(第三个,COpenCombineHelpers 被认为私有。不要将其导入到您的项目中)。

OpenCombine 本身没有依赖项。甚至没有 Foundation 或 Dispatch。如果您想使用 OpenCombineDispatch(例如使用 DispatchQueue 作为操作符如 debouncereceive(on:) 等)的 Scheduler),您需要导入 OpenCombineOpenCombineDispatch

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,选择最新可用的版本,并勾选需要的选项。

Select the OpenCombine and OpenCombineDispatch targets

CocoaPods

要将 OpenCombine 添加到使用 CocoaPods 的项目中,请将 OpenCombineOpenCombineDispatch 添加到您的 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.MapKeyPathPublishers.Merge)存在多种不同的类型,以便支持多种变体。例如,还有Publishers.MapKeyPath2Publishers.MapKeyPath3,它们非常相似但又有所不同,以至于Swift的类型系统在这里无能为力(因为缺乏变通型泛型的支持)。维护这些泛型类的多个实例既费时又容易出错(它们可能会不同步),因此我们使用GYB工具从模板生成这些实例。

GYB是一种Python脚本,可以评估模板文件中编写的Python代码,因此它非常灵活——模板可以是任意复杂的。关于GYB有一篇优秀的文章介绍NSHipster

GYB是Swift开源项目的一部分,并且可以与Swift本身的相同许可证一起分发。

GYB模板文件扩展名为.gyb。运行make gyb从这些模板生成Swift代码。生成的文件前缀为GENERATED-,并已提交到源代码管理。这些文件绝不能直接编辑。相反,应该编辑.gyb模板,然后使用make gyb重新生成这些文件。