无法赋值:'message'是函数中的'let'常量

Swi*_*yJD 0 swift

我正在尝试创建一个函数来检查值是否为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))
    }
Run Code Online (Sandbox Code Playgroud)

rma*_*ddy 5

由于message参数是常量的明显原因,您得到错误.在else你内部试图更新message参数.message通过the创建的变量if let也是一个常量,但其范围仅在整个块内if,而不是else整个if/else块之后.因此,message您尝试在调用中使用的变量getFixedLengthString是原始message参数.

最简单的解决方案是使用??(nil-coalescing)运算符:

func appendMessage(message: String?, fixLength: Int){
    messageBody.append(getFixedLengthString(message ?? DEFAULT_CHAR, fixLength))
}
Run Code Online (Sandbox Code Playgroud)

??运营商如果不返回左边的值nil与右边的值,如果左侧nil.