Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何避免重复这些类型约束?_Swift - Fatal编程技术网

Swift 如何避免重复这些类型约束?

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

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
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() { ... }
}