Swift:确定哪些协议方法和属性实际需要实现?

时间:2016-09-08 21:24:41

标签: swift swift-protocols

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()

有没有办法一目了然地告诉哪些协议方法和属性由任何扩展名定义?

1 个答案:

答案 0 :(得分:1)

如果您创建一个继承自协议P的类,则使用Xcode 8,任何未定义的函数或属性都将导致在类旁边显示红色错误项目符号。如果单击它,您可以选择定义存根函数。只会创建尚未在扩展中定义的功能。

就我所见(如果有更好的答案,我会很高兴看到它),这是你能做的最好的。