空下标后面的感觉?

时间:2016-01-10 20:38:24

标签: swift

为什么这甚至编译?什么是空的下标,显然表现得像没有参数的函数?

extension Array {
    subscript() -> Int {
        return 0
    }
}

let array = [1,3,2]
print(array[]) // "0"

请注意,它也可以用于赋值,因此它的行为类似于名为[]的计算属性。

1 个答案:

答案 0 :(得分:1)

  

为什么这甚至编译

它编译是因为你为Array定义了一个空的下标扩展名:

extension Array {
    subscript() -> Int {
        return 0
    }
}

数组已经定义了一个下标,你可以提供一个索引号并返回该索引处的元素。此扩展添加另一个下标,您不需要提供任何内容并返回数字零。

如果没有该扩展,这将编译:

let array = [1,3,2]
print(array[])
  

对于空的下标有什么需要,这显然表现得像没有参数的函数

没有“需要”;这是一个方便。毕竟,你可以对下标提出完全相同的“异议”!他们做任何你无法通过方法完成的事情。实际上,存在这样的方法;下标符号只是一段令人愉快的句法糖。