rx-swift - 如何在 RxSwift 中为 HasDelegate 协议编写 getter 和 setter?
问题描述
我正在HasDelegate
为IWDeviceManager
.
在我读过的所有帖子中,没有人为此public var delegate
属性编写 getter 和 setter。
编译器明确要求我为public var delegate
. 为什么在我的情况下需要它?
我尝试编写,但是当我尝试获取或设置委托时我的代码崩溃了。
我该如何解决这个问题?
我已经分享了下面的代码
extension IWDeviceManager: HasDelegate {
public typealias Delegate = IWDeviceManagerDelegate
// Compiler explicitly asks to write getter and setter for this.
public var delegate: IWDeviceManagerDelegate? {
get { // Crashes here
return IWDeviceManager.shared()?.delegate
}
set(newValue) { // crashes here
IWDeviceManager.shared()?.delegate = newValue
}
}
}
下面是 IWDeviceManager 的接口
open class IWDeviceManager : NSObject {
weak open var delegate: IWDeviceManagerDelegate!
open class func shared() -> Self!
open func initMgr()
open func initMgr(with config: IWDeviceManagerConfig!)
}
解决方案
而不是使用HasDelegate
试试这个:
class IWDeviceManagerDelegateProxy
: DelegateProxy<IWDeviceManager, IWDeviceManagerDelegate>
, DelegateProxyType
, IWDeviceManagerDelegate {
init(parentObject: IWDeviceManager) {
super.init(parentObject: parentObject, delegateProxy: IWDeviceManagerDelegateProxy.self)
}
static func currentDelegate(for object: IWDeviceManager) -> Delegate? {
return object.delegate
}
static func setCurrentDelegate(_ delegate: IWDeviceManagerDelegate?, to object: IWDeviceManager) {
object.delegate = delegate
}
static func registerKnownImplementations() {
self.register { IWDeviceManagerDelegateProxy(parentObject: $0) }
}
}
推荐阅读
- javascript - mach 以 Array 开头的 javascript
- r - 如何在R中没有嵌套for循环的情况下迭代一组函数?
- arrays - 如何比较MongoDB中同一对象的数组元素?
- azure - 计算成本 SonarQube - Azure
- liquibase - Liquibase 和 JAR 依赖项
- ios - 在swift 5的同一行声明和初始化变量或常量?
- javascript - 如何在javascript中检查某人是否在井字游戏中获胜?
- python - 在图例 MATPLOTLIB 前面绘制箭头
- algorithm - 使用邻接矩阵区分图和树
- angularjs - 在应用程序中访问 angularjs i18n 日期/时间和货币格式