【发布时间】:2017-03-04 12:29:37
【问题描述】:
我有一个对泛型集合进行操作的函数:
func foo<T: RangeReplaceableCollection>(_ bar: T)
where T.Iterator.Element == UInt8
{
//
}
该函数然后访问该集合的子范围,因此它需要额外的约束:
func foo<T: RangeReplaceableCollection>(_ bar: T)
where T.Iterator.Element == UInt8,
T.SubSequence: RangeReplaceableCollection,
T.SubSequence.Iterator.Element == T.Iterator.Element
{
//
}
它还调用本身对集合的子范围的子范围进行操作的函数,因此它需要更多的约束:
func foo<T: RangeReplaceableCollection>(_ bar: T)
where T.Iterator.Element == UInt8,
T.SubSequence: RangeReplaceableCollection,
T.SubSequence.Iterator.Element == T.Iterator.Element,
T.SubSequence.SubSequence: RangeReplaceableCollection,
T.SubSequence.SubSequence.Iterator.Element ==
T.SubSequence.Iterator.Element
{
//
}
有什么办法可以清理吗?
是否至少有一种方法可以将所有那些 where 子句隐藏在
typealias后面?如果没有,是否有解决此问题的提案?
【问题讨论】:
-
为什么有
AnyRandomAccessCollection<T>而没有AnyRangeReplaceableCollection<T>?也将解决问题并摆脱所有条款。
标签: swift generics collections