2017-10-24 19 views
0

値がnilであるかどうかをチェックし、デフォルト値を与える関数を作成しようとしています。値に代入することはできません: 'メッセージ'は関数の定数です。

func appendMessage(message: String?, fixLength: Int){ 
     if let message = message { 
     } else { 
      message = DEFAULT_CHAR//this is a default value, error is here 
     } 
      messageBody.append(getFixedLengthString(message, fixLength)) 
    } 
+2

関数の入力引数は 'Swift'では不変であるため、エラーです。 –

答えて

5

あなたはmessageパラメータが一定であることが明白な理由のためにエラーが発生します。 else内でmessageパラメータを更新しようとしています。 if letで作成されたmessage変数も定数ですが、範囲はif内であり、elseではなく、if/elseブロック内にのみあります。従ってgetFixedLengthStringへの呼び出しで使用しようとしているmessage変数は、元のmessageパラメータです。

最も簡単な解決策は??(NIL-合体)演算子を使用することである:左場合

func appendMessage(message: String?, fixLength: Int){ 
    messageBody.append(getFixedLengthString(message ?? DEFAULT_CHAR, fixLength)) 
} 

nilない場合??オペレータが左側に値を返し、右の値を側はnilです。

0

あなたのロジック/コードの多くを理解しようとする場合、あなたはかなり簡単に解決するだろう:これは私がこれまで持っているものです。

これは動作するはずです。

func appendMessage(message: String?, fixLength: Int) { 
    if let message = message { 
     messageBody.append(getFixedLengthString(message, fixLength)) 
    } else { 
     messageBody.append(getFixedLengthString(DEFAULT_CHAR, fixLength)) 
    } 
} 

おそらく、あなたはまた、この1つのライナーを試すことができます。

messageBody.append(getFixedLengthString(message == nil ? DEFAULT_CHAR : message!, fixLength)) 
関連する問題