函数和下标有什么区别,特别是在下面的代码中?

时间:2015-04-25 15:48:23

标签: swift

我读过“快速编程语言”,下标让我感到困惑,下面有一个带下标的例子,但我也可以用函数实现它,那么下标与函数相比究竟是什么意思?

以下示例有相同的输出“6次3是18”。

struct TimesTable {
    let multiplier: Int
    subscript(index: Int) -> Int {
        return multiplier * index
    }
}

let threeTimesTable = TimesTable(multiplier: 3)

println("6 times 3 is \(threeTimesTable[6])")


struct TimesTable2 {
    let multiplier: Int
    func times (index: Int) -> Int {
        return multiplier * index
    }
}

let threeTimesTable2 = TimesTable2(multiplier: 3)

println("6 times 3 is \(threeTimesTable2.times(6))")

1 个答案:

答案 0 :(得分:5)

下标是函数的子集。他们不能完成函数可以执行的所有操作(例如,他们不能使用inout个参数),但是他们做得非常好,语法非常方便(正方形)括号[ ])。

它们最常用于通过索引从集合中检索项目。所以不必写,

let array = [7, 3, 6, 8]
let x = array.itemAtIndex(0)   // x == 7

我们可以写,

let x = array[0]

或者代替,

let dictionary = ["one": 1, "two": 2]
let x = dictionary.objectForKey("one")  // x == Optional(1)

我们可以写,

let x = dictionary["one"]  // x == Optional(1)

语法简短直观。正如Okapi所说,它们可以充当getter和变量属性的setter,就像计算属性一样。

文档中的示例是对下标的一种非传统用法。我认为它应该说明你正在做的事情 - 可以使用下标来代替函数或计算属性,只要你认为[bracket]语法方便和有用。它们的使用不仅限于访问集合中的项目。

你可以改进自己的语法糖。