从基类扩展代理 [英] Extending a delegate from a base class
问题描述
我有一个objc基类:
I have an objc base class:
@protocol BaseClassDelegate;
@interface BaseClass : NSObject
@property (nonatomic, weak) id <BaseClassDelegate> delegate;
@end
@protocol BaseClassDelegate <NSObject>
-(void)baseDelegateMethod;
@end
我正在创建一个快速的子类,其中我要扩展我的委托...
I am creating a swift sub-class in which I want to extend my delegate...
protocol SubClassDelegate : BaseClassDelegate {
func additionalSubClassDelegateMethod();
}
class SubClass: BaseClass {
@IBAction func onDoSomething(sender: AnyObject) {
delegate?.additionalSubClassDelegateMethod(); <--- No such method in 'delegate'
}
}
现在,当我创建我的子类时,我可以说它符合SubClassDelegate并设置委托。问题是(当然),是这个子类不存在委托。有没有办法告诉编译器将我的代理扩展到我的子类? (或者我在这里疯了,错过了一些明显的东西)
Now, when I create my sub-class, I can say it conforms to the SubClassDelegate and set the delegate. The problem is (of course), is that 'delegate' doesn't exist in this sub-class. Is there a way to tell the compiler to 'extend' my delegate into my sub-class? (or am I being insane here and missed something obvious)
推荐答案
我会创建一个包装代理,使其成为正确的键入 SubClass
。
I'd either create a wrapper delegate to make it the correct type in SubClass
.
class SubClass: BaseClass {
var myDelegate: SubClassDelegate? {
get { return delegate as? SubClassDelegate }
set { delegate = newValue }
}
@IBAction func onDoSomething(sender: AnyObject) {
myDelegate?.additionalSubClassDelegateMethod();
}
}
或者简单地将委托转换为预期的类型: / p>
Or simply cast the delegate to the expected type:
(delegate as? SubClassDelegate)?.additionalSubClassDelegateMethod();
这篇关于从基类扩展代理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!