149

追加の変数を作成せずにこのエラーに対処するにはどうすればよいですか?

func reduceToZero(x:Int) -> Int {
    while (x != 0) {
        x = x-1            // ERROR: cannot assign to 'let' value 'x'
    }
    return x
}

xの値を格納するためだけに追加の変数を作成したくありません。私がやりたいことをすることさえ可能ですか?

4

7 に答える 7

45

Swift 1 および 2 の場合 (Swift 3 の場合は、inout パラメータを使用した achi の回答を参照してください): Swift の関数の引数はletデフォルトで設定されているvarため、値を変更する必要がある場合は次のように変更します。

func reduceToZero(var x:Int) -> Int {
    while (x != 0) {
        x = x-1     
    }
    return x
}
于 2014-06-06T09:04:36.970 に答える
17

可変配列ポインターを渡すためのSwift3の回答。

関数:

func foo(array: inout Array<Int>) {
    array.append(1)
}

関数の呼び出し:

var a = Array<Int>()
foo(array:&a)
于 2016-07-31T06:49:00.447 に答える
7

varSwiftでは、関数宣言の変数名の前にキーワードを追加するだけです。

func reduceToZero(var x:Int) -> Int { // notice the "var" keyword
    while (x != 0) {
        x = x-1            
    }
    return x
}

Swift book の「Functions」の章のサブセクション「Constant and Variable Parameters」を参照してください(現在の iBook の 210 ページ)。

于 2014-06-06T09:02:27.703 に答える