MulticastDelegate
这是一个优雅的由 Swift 编写的组播代理,带有单元测试
安装
手动
将 MulticastDelegate.swift
复制到您的项目中
CocoaPods
pod 'MulticastDelegateSwift'
SwiftPackageManager
您可以使用 SwiftPackageManager 并在 Package.swift
中指定依赖项,方法如下添加这一条
.Package(url: "https://github.com/jonasman/MulticastDelegate.git", majorVersion: 2)
用法
导入模块
import MulticastDelegateSwift
- 添加到您的类中:
let multicastDelegate = MulticastDelegate
() - 其他类必须作为代理添加:
service.delegate.addDelegate(self)
- 当您需要通知代理时:
multicastDelegate.invokeDelegates { delegate in delegate.done() }
备选版本
- 添加到您的类中:
let multicastDelegate = MulticastDelegate
() - 其他类必须作为代理添加:
service.delegate += self
- 当您需要通知代理时:
multicastDelegate |> { $0.done() }
示例
protocol ServiceDelegate {
func serviceGotData()
}
class Service {
var delegate = MulticastDelegate<ServiceDelegate>()
func fetchData() -> Bool {
// fetch Data and notify your delegates
// Call your delegates
delegate |> { delegate in
delegate.serviceGotData()
}
return true
}
}
class MainViewController: UIViewController, ServiceDelegate {
func serviceGotData() {
// do nothing
}
}
let service = Service()
let viewController = MainViewController()
service.delegate += viewController
service.fetchData()
操作符
有三个操作符用于简化多播使用
+=
调用 addDelegate(delegate: T)
-=
调用 removeDelegate(delegate: T)
|>
调用 invokeDelegates(invocation: (T) -> ()
注意事项
代码基于带有弱对象的 HashTable,因此无需担心代理被释放时的情况
许可证
The MIT License (MIT)
版权所有 © 2014 João Nunes
任何人免费获得此软件及其相关文档文件(“软件”)的副本,均可不受限制地处理该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售该软件的副本,并允许向提供软件的个人再行此行为,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或实质性部分中。
本软件按“原样”提供,不提供任何形式的明示或暗示保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者不对任何诉讼、损害或其他责任承担责任,无论这些责任是因合同、侵权或其他原因而产生的,并与该软件或其使用或其他与该软件有关的交易有关。