Swift:为什么'下标(var digitIndex:Int) - >诠释'是一个有效的功能签名?

时间:2014-08-28 16:20:29

标签: swift

这段代码来自Swift文档https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/Extensions.html

extension Int {
    subscript(var digitIndex: Int) -> Int {
        var decimalBase = 1
            while digitIndex > 0 {
                decimalBase *= 10
                --digitIndex
            }
            return (self / decimalBase) % 10
    }
}

显然var是保留字,为什么宣布:subscript(var digitIndex: Int) -> Int是合法的?

如果我将签名更改为subscript(#digitIndex: Int) -> Int,我将收到此编译器错误:

enter image description here

我的问题是:

1)为什么签名有效?

2)为什么我的更改导致异常?

1 个答案:

答案 0 :(得分:1)

使用var声明函数参数意味着它可以被修改,不是常量。在你的情况下,不使用var,你有一个常量参数,但你试图减少它。因此错误。

你的两个案例是:

func foo (x: int) { /* x is a constant, like `let x: int` */ }

func foo (var x: int) { /* x is not a constant */ }