我正在通过玩 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 文档中是分开的,此方法也足够了,因为它与协议中的必需方法具有相同的参数签名。