【问题标题】:Swift: figuring out which protocol methods and properties actually need to be implemented?Swift:弄清楚哪些协议方法和属性实际上需要实现?
【发布时间】: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&lt;Self.Index&gt;)generate() 在某些常见情况下也会提供。

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

【问题讨论】:

    标签: swift swift-protocols


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 2012-03-19
      • 1970-01-01
      • 2020-07-24
      • 2014-10-25
      相关资源
      最近更新 更多