无法分配值:' message'是一个“让...”不断变化

时间:2017-10-24 15:32:16

标签: swift

我试图创建一个检查值是否为零的函数,以及是否为其提供默认值。这就是我到目前为止所做的:

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 个答案:

答案 0 :(得分:5)

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

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

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

??运算符如果不是nil则返回左侧的值,如果左侧是nil,则返回右侧的值。

答案 1 :(得分:0)

如果你试图了解更多的逻辑/代码,那么你很容易解决它。

这个应该有效。

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

也许你也可以试试这个班轮:

messageBody.append(getFixedLengthString(message == nil ? DEFAULT_CHAR : message!, fixLength))