1

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

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

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

这是一个使用它的例子(取自我正在阅读的一本书):

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

我阅读了 Apple 的 swift language reference,部分:Generic Parameters and Arguments。但我仍然不清楚。提前感谢您的任何见解。  

4

1 回答 1

3

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

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

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

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

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

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

于 2014-12-20T23:39:15.140 回答