Swift 如何避免重复这些类型约束?
A有许多具有以下签名的函数:Swift 如何避免重复这些类型约束?,swift,Swift,A有许多具有以下签名的函数: func defilter_up<ReferenceLine:Collection>(line:ReferenceLine) where ReferenceLine.Iterator.Element == UInt8, ReferenceLine.Index == Int func defilter_average<ReferenceLine:Collection>(line:ReferenceLine) where ReferenceLi
func defilter_up<ReferenceLine:Collection>(line:ReferenceLine) where ReferenceLine.Iterator.Element == UInt8, ReferenceLine.Index == Int
func defilter_average<ReferenceLine:Collection>(line:ReferenceLine) where ReferenceLine.Iterator.Element == UInt8, ReferenceLine.Index == Int
func defilter_sub<ReferenceLine:Collection>(line:ReferenceLine) where ReferenceLine.Iterator.Element == UInt8, ReferenceLine.Index == Int
func defilter\u up(行:ReferenceLine),其中ReferenceLine.Iterator.Element==UInt8,ReferenceLine.Index==Int
func defilter_average(行:ReferenceLine),其中ReferenceLine.Iterator.Element==UInt8,ReferenceLine.Index==Int
func defilter_sub(行:ReferenceLine),其中ReferenceLine.Iterator.Element==UInt8,ReferenceLine.Index==Int
等等
这些类型约束变得非常冗长和笨拙。是否有一种好方法可以避免重复键入它们,这相当于泛型的
typealias
?您可以将包含的类/结构设置为泛型:
struct MyClass<ReferenceLine:Collection where
ReferenceLine.Iterator.Element == UInt8,
ReferenceLine.Index == Int> {
func defilterUp(line: ReferenceLine) { ... }
func defilterAverage(line: ReferenceLine) { ... }
func defilterSub(line: ReferenceLine) { ... }
}
如果这些函数对单个类是私有的,您可以通过将其设置为
专用扩展名来模拟访问控制,并将其放置在与使用类相同的文件中。最近在这里提出了一个类似的问题:。@MartinR取消删除此问题,因为另一个问题似乎是关于用其他泛型类型参数约束泛型,这是一个类似的问题,不一样。要么将父作用域设置为泛型,并在其中添加约束,要么等待此功能的发布,这将实现关联类型@Alexander上涉及声明协议的where子句
extension Collection where Iterator.Element == UInt8, Index == Int {
func defilterUp() { ... }
func defilterAverage() { ... }
func defilterSub() { ... }
}