Swift 何时使用泛型参数子句

Swift 何时使用泛型参数子句,swift,swift-playground,generics,swift-extensions,Swift,Swift Playground,Generics,Swift Extensions,我不熟悉swift中的泛型,在读一些书的时候,我遇到了一些我不懂的东西。在泛型函数中,何时使用类型参数(函数名后面的右键)合适?什么时候不合适 这里是一个未使用的示例(仅签名;来自标准库): func排序(isOrderedBefore:(T,T)->Bool)->数组 下面是一个使用它的示例(摘自我正在阅读的一本书): func强调(inout数组:[T],修改:(T)->T){ 对于0中的i..

我不熟悉swift中的泛型,在读一些书的时候,我遇到了一些我不懂的东西。在泛型函数中,何时使用类型参数(函数名后面的右键)合适?什么时候不合适

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

func排序(isOrderedBefore:(T,T)->Bool)->数组
下面是一个使用它的示例(摘自我正在阅读的一本书):

func强调(inout数组:[T],修改:(T)->T){
对于0中的i..
我阅读了苹果的swift语言参考,章节:通用参数和参数。但我还是不清楚。提前感谢您提供的任何见解。

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

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

在一个函数中声明一个新的泛型参数是不合适的,因为它会模糊或试图替换在其作用域中已声明的泛型参数。例如,在扩展阵列时,这是不合适的:

extension Array {
    func myFunc<T>() {
    }
}
扩展数组{
func myFunc(){
}
}
这里我们定义了一个新的
T
,它模糊了数组声明中已经声明的原始
T


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

这很有意义。非常感谢。
func emphasize<T>(inout array:[T], modification:(T) -> T) {
        for i in 0 ..< array.count {
            array[i] = modification(array[i])
        }
}
extension Array {
    func myFunc<T>() {
    }
}