Skip to main content
 首页 » 操作系统

swift之何时使用通用参数子句

2024年01月01日41txw1958

我是 swift 泛型的新手,在阅读一些书籍时,我遇到了一些我不明白的事情。在泛型函数中,什么时候使用类型参数(函数名后的右边)合适?什么时候不合适?

这是一个未使用的示例(仅签名;来自标准库):

func sorted(isOrderedBefore: (T, T) -> Bool) -> Array<T> 

这是一个使用它的例子(摘 self 正在阅读的一本书):

func emphasize<T>(inout array:[T], modification:(T) -> T) { 
        for i in 0 ..< array.count { 
            array[i] = modification(array[i]) 
        } 
} 

我阅读了 Apple 的快速语言引用,部分:Generic Parameters and Arguments。但我仍然不清楚。提前感谢您的任何见解。

请您参考如下方法:

在第一个例子中,泛型参数来自它定义的类型。我相信它是在已经具有通用类型 T 的数组中声明的。

在第二个例子中,函数本身声明了泛型参数。如果我没记错的话,这个函数是一个全局函数。它不在定义通用 T 的范围内。

只有在函数中声明新的泛型参数会掩盖或试图替换已在其范围内声明的参数才是不合适的。例如,当扩展数组时,这是不合适的:

extension Array { 
    func myFunc<T>() { 
    } 
} 

在这里,我们定义了一个新的 T,它掩盖了已经在 Array 声明中声明的原始 T。

在您需要通用类型的所有其他情况下,您应该自己声明它。