2017-07-19 109 views
0

我想用另一种协议扩展协议委托如下:延伸。在协议规定的委托与其他协议

protocol WriteableCallback: class { 
    ... 
} 

protocol Writeable { 
    weak var delegate: WriteableCallback? { get set } 
} 

protocol NetworkWriteablecallback: WriteableCallback { 
    ... 
} 

protocol NetworkWriteable: Writeable { 
    .. 
} 

现在实施NetworkWriteable是相当直截了当:

final class DefaultNetworkWriteable: NetworkWriteable { 
    weak var delegate: NetworkWriteablecallback? 
    //type 'DefaultNetworkWriteable' does not conform to protocol 'Writeable 
    //because delegate should be of type 'Writeablecallback' 
} 

如果我写

weak var delegate: Writeablecallback? 

一切编译和工作正常,除了我不能调用方法NetworkWriteablecallback直接。我知道,如果我沮丧的代表如下

if let delegate = delegate as? NetworkWriteablecallback { 
... 
} 

比它的工作正常,但铸造不是一个好方法。

其他建议?

回答

0

不幸的是,you can't "override"delegate要求声明,如果你能我不知道这将是一件好事。

我会为透明地投射代表提供便利。并且通过协议扩展,该投射成为NetworkWriteable协议的先天行为。

extension NetworkWriteable { 
    var networkWriteableDelegate: NetworkWriteablecallback? { 
     set { 
      delegate = newValue 
     } 
     get { 
      return delegate as? NetworkWriteablecallback 
     } 
    } 
} 

final class DefaultNetworkWriteable: NetworkWriteable { 

    weak var delegate: WriteableCallback? 

    func myfunc() { 
     if self.networkWriteableDelegate === self.delegate { 
      // always true 
     } 
    } 
}