Publisher Kit

Platforms Languages Swift Package Manager compatible Carthage compatible CocoaPods Compatible

概述

PublisherKit 提供了一个声明式的 Swift API,用于处理随时间推移的异步事件。它是 Apple Combine Framework 的开源版本,并添加了许多其他功能。

该项目的目标是提供一个兼容、可靠且高效的 Combine Framework 实现,可在早于 macOS 10.15、iOS 13、tvOS 13 和 watchOS 6 的 Apple 操作系统上使用。

要了解有关 Combine Framework 的更多信息,请参阅 Apple 的文档 此处

支持的平台

部署目标

安装

Swift Package Manager

要使用 Swift Package Manager 将 PublisherKit 集成到您的项目中,您可以将该库添加为 Xcode(11 及以上版本)中的依赖项 – 请参阅文档。软件包存储库 URL 是

https://github.com/ragzy15/PublisherKit.git

或者,您也可以在您的 Package.swift 文件中将 PublisherKit 添加为依赖项。例如

// swift-tools-version:5.1
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "YourPackage",
    products: [
        .library(
            name: "YourPackage",
            targets: ["YourPackage"]),
    ],
    dependencies: [
        .package(url: "https://github.com/ragzy15/PublisherKit.git", from: "4.0.2"),
    ],
    targets: [
        .target(
            name: "YourPackage",
            dependencies: ["PublisherKit"]),
    ]
)

您可以通过使用 Xcode 内置的 swift package manager 进行安装,或者克隆存储库并将子项目添加到您的项目中。

CocoaPods

CocoaPods 是 Cocoa 项目的依赖项管理器。

如果您尚未安装 Cocoapods gem,请运行以下命令

$ gem install cocoapods

要使用 CocoaPods 将 PublisherKit 集成到您的 Xcode 项目中,请在您的 Podfile 中指定它

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!

pod 'PublisherKit', '~> 4.0.2'

然后,运行以下命令

$ pod install

Carthage

Carthage 是一个去中心化的依赖项管理器,可以自动执行将框架添加到应用程序的过程。

您可以使用 Homebrew 安装 Carthage,使用以下命令

$ brew update
$ brew install carthage

要使用 Carthage 将 PublisherKit 集成到您的 Xcode 项目中,请在您的 Cartfile 中指定它

github "ragzy15/PublisherKit"

用法

searchTextField.textDidChangePublisher
    .debounce(for: .milliseconds(300), scheduler: DispatchQueue.main)
    .compactMap { (text) -> String? in
        text.isEmpty ? nil : text
    }
    .removeDuplicates()
    .flatMap { (text) -> AnyPublisher<SearchResults, Never> in
        self.search(with: text)
    }
    .receive(on: DispatchQueue.main)
    .sink { (results) in
        print(results)
    }
    .store(in: &cancellables)

还包含一个演示项目。

沟通

谢谢 ;)