从基类扩展代理 [英] Extending a delegate from a base class

查看:108
本文介绍了从基类扩展代理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆