2016-12-01 16 views
2

私は、配列の各要素に対して、それを呼び出す必要がinout引数配列の各要素に対して `inout`引数を指定して関数を呼び出す方法は?

func modify(word: inout Word) 

を取る機能があります。ここで私は

for word in words { 
    modify(word: &word) 
} 

何をすべきかですが、私はエラーを取得する:

cannot pass immutable value as inout argument: 'word' is a 'let' constant

私はまだ同じエラー、mapwords.map{ modify(word:&$0) }を反復処理しようとした:

cannot pass immutable value as inout argument: '0$' is immutable

はコールする方法はあります配列の各要素にinout引数を持つ関数?

+1

INOUT使用しないでください。代わりにインデックスを反復、直接配列を変更する

。あなたがする必要がある場合は、配列を反復処理するか、変更された単語で新しい配列を作成するか、列挙型ではなくインデックス変数を使用する必要があります – Paulw11

+0

[配列の構造体の値を変更する](http:// stackoverflow。 com/questions/26371751/change-the-value-of-struct-in-an-array) –

答えて

1

for word in words構文を使用する場合、wordは実際には配列内の要素の不変コピーです。

for i in words.indices { 
    modify(word: &words[i]) 
} 

(少なくとも配列の場合)に相当する

for i in 0..<words.count { 
    modify(word: &words[i]) 
} 
+0

あなたのを見てから私の答えを削除する。私はこれを知らなかったし、あなたの答えの少ない "スウィフティー"バージョンを投稿しました!ニース! – dfd

+0

ありがとう、それは動作します! – Bretsko

+0

'words'は' let'ではなく 'var'で宣言する必要があることに注意してください。 – matt

関連する問題