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
,我将收到此编译器错误:
我的问题是:
1)为什么签名有效?
2)为什么我的更改导致异常?
答案 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 */ }