OpenCombine
苹果 Combine 框架的开源实现,用于处理随时间推移的值。
本项目的主要目标是提供一个兼容、可靠且高效的实现,可以在macOS 10.15和iOS 13之前的Apple操作系统上使用,以及在Linux、Windows和WebAssembly上使用。
CI状态 |
---|
安装
OpenCombine
包含三个公开的目标:OpenCombine
、OpenCombineFoundation
和 OpenCombineDispatch
(第四个 COpenCombineHelpers
被视为私有。不要将它们导入到项目中)。
OpenCombine 本身没有依赖。甚至没有Foundation或Dispatch。如果您想将 OpenCombine 与 Dispatch 一起使用(例如,使用 DispatchQueue
作为 Scheduler
的操作符,如 debounce
、receive(on:)
等),则需要导入 OpenCombine
和 OpenCombineDispatch
。对 Foundation 也适用:如果您想使用 NotificationCenter
或 URLSession
发布者,您也需要导入 OpenCombineFoundation
。
如果您在同一平台上开发代码,您可能希望导入 OpenCombineShim
模块,这会条件性地导出 Combine 在 Apple 平台上(如果有),以及在其他平台上的所有 OpenCombine 模块。您只能在使用 SwiftPM 时导入 OpenCombineShim
。目前它对于 CocoaPods 不可用。
Swift Package Manager
Swift Package
要将 OpenCombine
添加到您的 SwiftPM 包中,请将 OpenCombine
包添加到 Package.swift
文件中的包和目标依赖列表。目前 OpenCombineDispatch
和 OpenCombineFoundation
产品不支持 WebAssembly。如果您的项目仅针对 WebAssembly,请在依赖列表中省略它们。如果它针对包括 WebAssembly 在内的多个平台,请仅在非 WebAssembly 平台上依赖它们,使用 条件目标依赖关系。
dependencies: [
.package(url: "https://github.com/OpenCombine/OpenCombine.git", from: "0.14.0")
],
targets: [
.target(
name: "MyAwesomePackage",
dependencies: [
"OpenCombine",
.product(name: "OpenCombineFoundation", package: "OpenCombine"),
.product(name: "OpenCombineDispatch", package: "OpenCombine")
]
),
]
Xcode
OpenCombine
还可以直接在您的 Xcode 项目中添加为 SwiftPM 依赖(需要 Xcode 11 及以上版本)。
要做到这点,请打开 Xcode,使用 文件 → Swift Packages → 添加 Package Dependency…,输入 仓库 URL,选择最新可用的版本,并激活复选框
CocoaPods
要将 OpenCombine
添加到使用 CocoaPods 的项目中,请将 OpenCombine
和 OpenCombineDispatch
添加到您的 Podfile
中的目标依赖列表。
pod 'OpenCombine', '~> 0.14.0'
pod 'OpenCombineDispatch', '~> 0.14.0'
pod 'OpenCombineFoundation', '~> 0.14.0'
调试器支持
文件 opencombine_lldb.py
定义了一些 lldb
类型摘要,以便更轻松地进行调试。这些类型摘要改善了 lldb
和 Xcode 显示一些 OpenCombine 值的方式。
要使用 opencombine_lldb.py
,找出其完整路径。假设完整路径为 ~/projects/OpenCombine/opencombine_lldb.py
。然后,将以下语句添加到您的 ~/.lldbinit
文件中
command script import ~/projects/OpenCombine/opencombine_lldb.py
当前,opencombine_lldb.py
定义了以下类型的类型摘要
Subscribers.Demand
- 这次的介绍就到这里。
贡献
请参见 CONTRIBUTING.md。