如何在 RxSwift 中为 HasDelegate 协议编写 getter 和 setter?
How to write getter and setter for HasDelegate protocol in RxSwift?
我正在为 IWDeviceManager
实施 HasDelegate
协议。
在我看过的所有帖子中,没有人为这个public var delegate
属性写过getter & setter。
编译器明确要求我为 public var delegate
编写 getter & setter。为什么我的情况需要它?
我尝试编写,但当我尝试获取或设置委托时我的代码崩溃了。
如何解决这个问题?
我已经分享了下面的代码
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: [=10=]) }
}
}
我正在为 IWDeviceManager
实施 HasDelegate
协议。
在我看过的所有帖子中,没有人为这个public var delegate
属性写过getter & setter。
编译器明确要求我为 public var delegate
编写 getter & setter。为什么我的情况需要它?
我尝试编写,但当我尝试获取或设置委托时我的代码崩溃了。
如何解决这个问题?
我已经分享了下面的代码
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: [=10=]) }
}
}