2017-06-04 7 views
0

のArrayの問題変異値を持つ:スウィフト3 - 私はこの配列内の各単語の文字列から最後の文字を取るしようとしています機能

var nonsenseArray = ["bungalow", "buffalo", "indigo", "although", "Ontario", "albino", "%$&#!"] 

との各文字の文字列を作成します関数内のfor-loopを使用します。以下は

cannnot use mutating member on immutable value: "every" is a "let" constant 

が私のコードです:私は他の回答から発見した

func combineLastCharacters(array: [String]) -> String { 
    var myString = "" 
    var array = array 
    for every in array { 
     myString = "\(every.remove(at: every.index(before: 
     every.endIndex)))" + myString 
} 
return myString 

その使用して:私は良い答えを持っていますが、次のエラーを取得していますような気がし

var array = array 

配列が変更可能になるはずです。そのため、removeメソッドを使用できます。どんな助けでも大歓迎です。

私が作成しようとしている文字列は「woohoo!」です。

答えて

0

arrayは可変でもよいが、everyではなく、が突然変異を試みている。また、文字列の先頭に文字を追加します。あなたが変更することはできません

func combineLastCharacters(array: [String]) -> String { 
    return array.reduce("", { $0 + String($1.characters.last!) }) 
} 
+0

私は機能を印刷しようとすると、今私は、コンパイラの警告なし出力を取得しています。警告は次のとおりです: "変数配列は変更されませんでした: 'let' constant 'に変更することを検討してください。私は毎回varを追加するというあなたの提案を使って、最初の問題を修正しました。 –

+0

@Cali_Rangerコンパイラ警告に関しては、関数を複製するときに 'var array = array'行を削除したことに注意してください。出力を得ることに関して:あなたはどのコードを使って印刷していますか? –

+0

私は出力の不足は、コンパイラの警告のためだと思った。 'var array = array'を一旦削除すると、コードが機能しました。 –

0

func combineLastCharacters(array: [String]) -> String { 
    var myString = "" 
    for var every in array { 
     myString += "\(every.remove(at: every.index(before: 
     every.endIndex)))" 
    } 
    return myString 
} 

あるいは単に:これを試してみてください。それは変更することはできませんlet定数として定義されているためevery変数、私はあなたの代わりにremovesubstringをしたいと思う:

func combineLastCharacters(array: [String]) -> String { 
    var myString = "" 
    for every in array { 
     myString = "\(every.substring(from: every.index(before: every.endIndex)))" + myString 
    } 
    return myString 
} 
関連する問題