
为什么这三个初始化器是RangeReplaceableCollection的一部分?
我是如何遇到的:我正在创建一个行为类似于数组的集合,但可以使用符合StrIDeable的任何通用索引进行下标.它的声明如下:
public struct AnyIndexArray<Index: StrIDeable,Element where Index.StrIDe == Int> { private var elements: [Element] public var startIndex: Index public init<S: Sequence where S.Iterator.Element == Element> (elements: S,startIndex: Index) { self.elements = Array(elements) self.startIndex = startIndex }} 由于底层数组符合RangeReplaceableCollection,因此将AnyIndexArray与此协议一致也是有意义的.但是,我无法提供空的初始化器,因为至少需要一个startIndex.如果我仍然实现空的初始化器并且只将fatalError()放入其体内,一切正常 – 除了三个初始化器和removeAll.
什么是RangeReplaceableCollection它需要一个空的初始化器,而Collection不需要?
解决方法 “一个空的初始化器 – 在泛型函数中很有用,因为它允许函数创建相同类型的新空集合”,如objc.io“Advanced Swift”一书所述.对我来说,听起来实现应该是可选的,但值得在swift-evolution组中进行讨论.
在你的情况下为什么startIndex不能有默认值0?
加成:
实际上已经在这里讨论了https://lists.swift.org/pipermail/swift-users/Week-of-Mon-20160704/002510.html
总结以上是内存溢出为你收集整理的swift – 为什么RangeReplaceableCollection需要一个空的初始化器?全部内容,希望文章能够帮你解决swift – 为什么RangeReplaceableCollection需要一个空的初始化器?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)