如何在符合 Swift 协议的同时确定要实现哪些成员

  • 本文关键字:实现 成员 Swift 协议 swift
  • 更新时间 :
  • 英文 :


我正在通过玩 Swift 集合来学习 Swift。我想创建自己的序列,我知道我必须遵守SequenceType协议。

应该如何知道我必须实现协议的哪些成员?Apple文档显示了SequenceType协议(http://developer.apple.com/library/mac/documentation/Swift/Reference/Swift_SequenceType_Protocol/index.html)的许多方法,例如。 dropLast(_:Int)generate()underestimateCount()

但事实证明,我只需要提供generate()方法,编译器就很高兴:

class MySequence : SequenceType {
    func generate() -> MyGenerator{
        return MyGenerator(total: 6)
    }
}

(如果不是各种博客文章,我不知道必须实施哪些SequenceType成员)

如何确定在符合协议的同时需要实现哪个成员?

我已经看到有些方法标有Default implementation标签。但是,例如,dropLast(_: Int) -> Self.SubSequence没有标有这样的标签,我不必实现它。

如果您查看 API 文档,您会注意到某些方法标有 Default implementation 。这意味着该方法的实现已在扩展中定义,因此,除非要修改默认行为,否则无需重写它们。这不适用于具有默认实现的generate()的原因是因为它的默认实现具有阻止它们处理所有情况的通用约束。

您提到的用于 underestimateCount() 和其他方法的方法具有没有约束的默认实现,这意味着您不需要覆盖它们。

具体来说dropLast(_: Int),它实际上确实有一个使用 Default 实现指定的版本,即 dropLast(_: Int) -> AnySequence<Self.Generator.Element> Default Implementation .即使它们在 API 文档中是分开的,此方法也足够了,因为它与协议中的必需方法具有相同的参数签名。

最新更新