【发布时间】:2016-09-09 06:21:23
【问题描述】:
Swift 协议允许扩展,(根据我的理解)可以被视为根据其他协议方法和属性定义的默认实现。有时这些扩展附加了条件,但有时它们只是通配符。这使得弄清楚在遵守协议的对象中实际上需要实现什么有点困难。例如,CollectionType 名义上需要实现以下(顶级)方法和属性:
public func generate() -> Self.Generator
public subscript (position: Self.Index) -> Self.Generator.Element { get }
public subscript (bounds: Range<Self.Index>) -> Self.SubSequence { get }
public func prefixUpTo(end: Self.Index) -> Self.SubSequence
public func suffixFrom(start: Self.Index) -> Self.SubSequence
public func prefixThrough(position: Self.Index) -> Self.SubSequence
public var isEmpty: Bool { get }
public var count: Self.Index.Distance { get }
public var first: Self.Generator.Element? { get }
但实际上,除了以下四个之外,所有内容都已在通配符扩展中定义:
public func generate() -> Self.Generator
public subscript (position: Self.Index) -> Self.Generator.Element { get }
public subscript (bounds: Range<Self.Index>) -> Self.SubSequence { get }
public var count: Self.Index.Distance { get }
即使在其中,subscript (bounds: Range<Self.Index>) 和 generate() 在某些常见情况下也会提供。
有没有办法一目了然地知道哪些协议方法和属性没有由任何扩展定义?
【问题讨论】:
标签: swift swift-protocols