A有很多具有以下签名的功能:
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
等
这些类型限制变得非常漫长且难以处理。有没有一种好的方法可以避免重复输入它们,相当于泛型的typealias
?
答案 0 :(得分:1)
您可以使包含类/结构通用:
struct MyClass<ReferenceLine:Collection where
ReferenceLine.Iterator.Element == UInt8,
ReferenceLine.Index == Int> {
func defilterUp(line: ReferenceLine) { ... }
func defilterAverage(line: ReferenceLine) { ... }
func defilterSub(line: ReferenceLine) { ... }
}
另一个选择是重构代码,使它们是 泛化对象的函数,如下所示。这是代码结构的重大变化,因此如果没有上下文,我无法确定这是否适用于您的用例。
extension Collection where Iterator.Element == UInt8, Index == Int {
func defilterUp() { ... }
func defilterAverage() { ... }
func defilterSub() { ... }
}
如果这些函数对于单个类是私有的,则可以通过将其设置为private extension
来模仿访问控制,并将其放在与使用类相同的文件中。