用Swift 4.2编写的多播委托框架。
特性
特性 | |
---|---|
为自定义类添加多播委托 | |
具有多播委托属性的UIKit控件子类(目前仅适用于UITableView) | |
使用responsibleForSelectors 函数管理哪个性委托负责 UIKit 控件的返回值 |
示例
要运行示例项目,请首先克隆仓库,然后从示例目录运行pod install
。
UITableView示例
let tableView = MultidelegateTableView()
tableView.multiDelegate.add(delegate: self)
自定义类示例
protocol FooClassDelegate {
func fooEvent()
}
class FooClass {
var multicastDelegate = MulticastDelegate<FooClassDelegate>()
func foo() {
multicastDelegate.invoke { delegate in
delegate.fooEvent()
}
}
}
class BarClass: FooClassDelegate {
var foo = FooClass()
var baz = BazClass()
init() {
foo.multicastDelegate.add(delegate: self)
foo.multicastDelegate.add(delegate: baz)
}
func fooEvent() {
}
}
class BazClass: FooClassDelegate {
func fooEvent() {
}
}
负责 selectors 示例
一些委托方法可以返回值。因此,当有几个委托时,我们需要一个机制来管理哪一个委托负责返回值。只有一个委托应该负责返回值,其他的委托是听众。
class FooClass: UITableViewDelegate, MulticastableDelegate {
var tableView: MultidelegateTableView
func setup() {
tableView.multiDelegate.add(delegate: self)
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
func responsableForSelectors() -> [String]? {
return [#selector(tableView(_:heightForRowAt:)).description]
}
}
需求
iOS 10.0+ Swift 4.0+
安装
通过CocoaPods可以获得MulticastDelegate。要安装它,只需将以下行添加到您的Podfile中
pod 'MulticastDelegateKit'
作者
亚历克斯·基塞尔,[email protected]
许可
MulticastDelegate 在MIT许可下可用。更多信息请参阅LICENSE文件。