广播 2.0.2

Broadcast 2.0.2

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2018年9月
SPM支持SPM

Mitch Treece维护。



Broadcast 2.0.2

Broadcast

Version Swift iOS License

从版本2.0.0开始,不再支持Objective-C。如果您需要它,请使用版本1.4.0或以下版本。

概览

Broadcast是实例同步和属性绑定的一种快速简单的解决方案。类似的功能也可以使用ReactiveCocoa等库实现,但这些通常过于复杂且功能过剩。

安装

CocoaPods

Broadcast已集成到CocoaPods!

  1. 将以下内容添加到您的Podfile
use_frameworks!
pod 'Broadcast'
  1. 在您的项目目录中运行pod install
  2. 在任何需要的地方导入Broadcast模块
  3. 完成

手动

您也可以手动将源文件添加到项目中。

  1. 克隆此git仓库
  2. 将所有位于 Broadcast/ 子目录中的 Swift 文件添加到您的项目中。
  3. 完成

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!")
}