你可以通过将 SwiftBus 添加为 Package.swift
文件中的依赖项,将其添加到你的项目中
// swift-tools-version:5.7
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "MyProject",
products: [
.library(name: "MyProject", targets: ["MyProject"])
],
dependencies: [
.package(url: "https://github.com/mtynior/SwiftBus.git", .upToNextMajor(from: "1.0.0")),
],
targets: [
.target(name: "MyProject", dependencies: ["SwiftBus"]),
.testTarget(name: "MyProjectTests", dependencies: ["MyProject"])
]
)
在 Xcode 中打开你的项目,然后
https://github.com/mtynior/SwiftBus.git
并按下 Enter
,Up to next major version
,SwiftBus 允许发送和接收符合空 EventRepresentable
协议的自定义事件
import SwiftBus
import Combine
// 1. Define custom event
struct RebelsActivityDetectedEvent: EventRepresentable {
let planet: String
let distanceInParsecs: Int
}
// 2. Create EventBus
let eventBus: EventTransmittable = EventBus()
var subscriptions: Set<AnyCancellable> = []
// 3. Add event handlers and store the reference to a subscription
eventBus.onReceive(RebelsActivityDetectedEvent.self) { event in
print("Detected rebels \(event.distanceInParsecs) parsecs from us on \(event.planet)")
}
.store(in: &subscriptions)
// 4. Send event
let event = RebelsActivityDetectedEvent(planet: "Hoth", distanceInParsecs: 12)
eventBus.send(event)
如果你不想使用自定义事件结构,你可以发送和接收命名事件
import SwiftBus
import Combine
// 1. Create EventBus
let eventBus: EventTransmittable = EventBus()
var subscriptions: Set<AnyCancellable> = []
// 2. Add handler for named event with params
eventBus.onReceive("RebelsActivityDetected") { params in
print("Detected rebels \(params["distanceInParsecs"]) parsecs from us on \(params["planet"])")
}
.store(in: &subscriptions)
// 3. Add handler for named event without params
eventBus.onReceive("JumpedToHyperspace") { _ in
print("Jumped to hyperspace")
}
.store(in: &subscriptions)
// 4. Send named event with params
eventBus.send("RebelsActivityDetected", params: ["planet": "Hoth", "distanceInParsecs": 12])
// 5. Send named event without params
eventBus.send("JumpedToHyperspace")
默认情况下,事件在用于发送事件的同一线程上接收。SwiftBus 允许切换用于接收事件的线程
// Receive event on Main Thread
eventBus.onReceive(RebelsActivityDetectedEvent.self, performOn: DispatchQueue.main) { _ in
print("This will be executed on the main thread")
}
.store(in: &subscriptions)
// Receive event on Background Thread
eventBus.onReceive("JumpedToHyperspace", performOn: DispatchQueue.global(qos: .background) { _ in
print("This will be executed on the background thread")
}
.store(in: &subscriptions)
SwiftBus 在 MIT 许可下发布。有关详细信息,请参阅 LICENSE。