为什么在Swift中的Array扩展内部时相同的方法会失败?

时间:2014-06-05 01:14:43

标签: arrays swift

我尝试从数组扩展中调用sort()时出现奇怪的行为,例如此方法:

func test() {
    let a = [1,2,3]
    sort(a) { x, y in x < y }
}

单独工作,但在Array扩展名内部时失败:

extension Array {
    func test() {
        let a = [1,2,3]
        sort(a) { x, y in x < y }
    }
}

这是一个构建错误,失败了:

  

电话中的额外参数

奇怪的是,同样的方法适用于String扩展名:

extension String {
    func test() {
        let a = [1,2,3]
        sort(a) { x, y in x < y }
    }
}

为什么我不能在数组扩展名中调用sort()

1 个答案:

答案 0 :(得分:3)

因为Array有一个名为sort的方法,其形式为sort(isOrderedBefore: (T, T) -> Bool)

因此,当您在sort范围内调用Array时,实际上是指该版本而非全局sort函数。

感谢this answer在我的问题中,我发现您可以通过使用Swift的默认命名空间确保您在全局范围内调用sort版本,迅速。因此,可以通过Swift.sort访问全局版本。