swift - 无法分配给值 : 'message' is a 'let' constant in a fucntion

标签 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))
    }

最佳答案

你得到这个错误的原因很明显,message 参数是一个常量。在 else 中,您正在尝试更新 message 参数。通过 message 创建的 if let 变量也是一个常量,但它的范围仅在 if 内部,而不是 else 或整个 if/else block 之后。因此,您在调用 message 时尝试使用的 getFixedLengthString 变量是原始 message 参数。

最简单的解决方案是使用 ??(零合并)运算符:

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

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

关于swift - 无法分配给值 : 'message' is a 'let' constant in a fucntion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46914526/

相关文章:

ios - 结构默认初始化程序不触发 didSet

arrays - 如何快速从数组获取值到变量

ios - 将 UIGestureRecognizer 初始化为 Swift 中属性定义的一部分?

ios - 提高 VNDetectHumanBodyPoseRequest 的 body 跟踪性能

swift - Swift 中的 NSData 到 [Uint8]

ios - Swift:未识别 UITextField

objective-c - SKAction.runAction() 完成 block (闭包)的内存泄漏

swift - 使用 spriteKit 动画后恢复第一张图片

具有关联类型和影子类型删除的 Swift 协议(protocol)

swift - 复制自定义对象按值而不是按引用复制它