从版本2.0.0
开始,不再支持Objective-C。如果您需要它,请使用版本1.4.0
或以下版本。
概览
Broadcast是实例同步和属性绑定的一种快速简单的解决方案。类似的功能也可以使用ReactiveCocoa等库实现,但这些通常过于复杂且功能过剩。
安装
CocoaPods
Broadcast已集成到CocoaPods!
- 将以下内容添加到您的
Podfile
use_frameworks!
pod 'Broadcast'
- 在您的项目目录中运行
pod install
- 在任何需要的地方导入
Broadcast
模块 - 完成
手动
您也可以手动将源文件添加到项目中。
- 克隆此git仓库
- 将所有位于
Broadcast/
子目录中的 Swift 文件添加到您的项目中。 - 完成
Broadcastable
Broadcastable
协议定义了一个对象,当其属性发生变化时可以被通知并作出反应。为了符合 Broadcastable
,一个对象只需返回一个广播标识符,并在初始化时调用 broadcast.make()
。这个广播标识符将被用来识别匹配的实例并通知它们变化。
class Post: Broadcastable {
var postId: String
var numberOfLikes: Int
var broadcastId: String {
return postId
}
init(postId: String, numberOfLikes: Int) {
self.postId = postId
self.numberOfLikes = numberOfLikes
self.broadcast.make()
}
}
_signaling_
在信号块内部进行的任何更改都将传播给共享相同标识符的对象的所有实例。_signal()_ 函数的闭包提供了一个用于替换实际匹配的 _Broadcastable_ 对象的 “代理” 模板对象。
post.broadcast.signal { (aPost) in
aPost.numberOfLikes += 1
}
Listening
Broadcastable
对象可以被外部观察变化。这对于您需要将 UI 绑定到对象的属性时非常有用。
class PostCell: UITableViewCell {
var listener: BroadcastListener?
var post: Post? {
didSet {
guard let post = post else { return }
layoutUI(with: post)
listener = post.broadcast.listen { [weak self] in
self?.layoutUI(with: post)
}
}
}
...
}
可以通过 BroadcastGroupListener
一次性观察 Broadcastable
对象的多个组。
var listener: BroadcastGroupListener?
let posts = [
Post(postId: "0", numberOfLikes: 3),
Post(postId: "1", numberOfLikes: 13),
Post(postId: "2", numberOfLikes: 23)
]
listener = posts.listen { (object) in
print("A post was updated!")
}