为什么这甚至编译?什么是空的下标,显然表现得像没有参数的函数?
extension Array {
subscript() -> Int {
return 0
}
}
let array = [1,3,2]
print(array[]) // "0"
请注意,它也可以用于赋值,因此它的行为类似于名为[]
的计算属性。
答案 0 :(得分:1)
为什么这甚至编译
它编译是因为你为Array定义了一个空的下标扩展名:
extension Array {
subscript() -> Int {
return 0
}
}
数组已经定义了一个下标,你可以提供一个索引号并返回该索引处的元素。此扩展添加另一个下标,您不需要提供任何内容并返回数字零。
如果没有该扩展,这将不编译:
let array = [1,3,2]
print(array[])
对于空的下标有什么需要,这显然表现得像没有参数的函数
没有“需要”;这是一个方便。毕竟,你可以对下标提出完全相同的“异议”!他们做任何你无法通过方法完成的事情。实际上,存在这样的方法;下标符号只是一段令人愉快的句法糖。