是否可以在类协议上创建willSet的默认实现

时间:2015-12-02 19:37:34

标签: ios swift protocols protocol-extension

我要做的是在将对象替换为来自我的服务对象的委托时通知对象。我想知道是否有办法创建一个默认的willSet,所以我不必为我创建的每个服务对象重复代码:

protocol BaseServiceDelegate: class {
    var delegate: BaseServiceDelegate? {get set}
    func servicesDelegateReferanceWasRemoved(service: BaseServiceDelegate)
}

extension BaseServiceDelegate {

    willSet(newValue){
        delegate?.servicesDelegateReferanceWasRemoved(self)
        self = newValue
    }
}

我真的不知道从哪里开始扩展的语法或者这是否可行。上面代码的错误在'willSet'行:“Exspected declaration” 感谢您的时间 仍然不确定它是否可能,但我做了一些编辑,以确保您可以访问定义的委托对象

1 个答案:

答案 0 :(得分:0)

我能找到的最佳答案是定义一个基本协议:

protocol baseProtocol {
    func informOfAction()
}

然后在您希望也具有此功能的代理上实现此功能:

protocol childProtocol: baseProtocol {
    func somethingHappend()
    func somethingElseHappend()
}

当你创建符合childProtocol的对象时,自定义将设置在那里

var delegate: childProtocol? {
    willSet{
        delegate?.informOfAction()
    }
}

不如我想要的那么好但不是太糟糕,我的所有物品上额外的3行类似于'委托'