4

2 つの値のタプルを返す Swift 関数があります。最初の値は、常にではありませんが、通常、呼び出し元の変更可能な状態の一部の「更新された」バージョンとして使用されることを意図しています (inoutタプルの代わりにこれを使用することもできますが、それはそれをより面倒にします新しい状態を維持しながら古い状態を維持します)。2 番目の値は、通常、関数によって生成される不変の戻り値であり、既存の変更可能な状態をオーバーライドすることは意図されていません。

概念的には、使用法は次のようになります。

var state = // initialize
(state, retval1) = process(state)
(state, retval2) = process(state)
(state, retval3) = process(state)

ここでの問題は、明らかに、retval1retval2、およびretval3が宣言されておらず、コンパイラが怒ることです。

stateである必要があり、var再宣言してはならないので、書くことはできません

let (state, retval) = process(state)

ただし、は変更されることはなく、ベスト プラクティスと適切なコーディング スタイルの問題としてretvalで宣言する必要があります。let

次の構文が機能することを期待していましたが、機能しません。

(state, let retval) = process(state)

このタプルを解凍/分解するにはどうすればよいですか?

4

1 に答える 1

3

letと をvar同時にバインドするための構文があるとは思いません。

興味深いことに、次のように実行できますswitch

let pair = (1,2)
switch pair {
case (var a, let b):
    ++a
default:
    break
}

しかし、(var a, let b) = pair(または同様の変種)は可能ではないようです。

于 2015-01-31T12:51:13.080 に答える