【问题标题】:Cannot use mutating member on immutable value inside a closure不能对闭包内的不可变值使用变异成员
【发布时间】:2016-11-18 01:17:30
【问题描述】:

我尝试将字符串中每个单词的首字母大写,我有以下代码:

func makeHeadline(string: String) -> String {
        let headline = words.map { (word) -> String in
        var word = word
        let firstCharacter = word.remove(at: word.startIndex)
        return "\(String(firstCharacter).uppercased())\(word)"
        }.joined(separator: " ")

        return headline
    }

但是,我收到以下错误:

不能对不可变值使用变异成员:'word' 是 'let' 常量。

我尝试在单词 (var word) 之前添加 var,但出现错误:

参数可能没有 'var' 说明符。

我该如何解决这个问题?

【问题讨论】:

标签: swift swift3


【解决方案1】:

制作本地可变副本:

func makeHeadline(string: String) -> String {
    let words = string.components(separatedBy: " ")

    let headline = words.map { (word) -> String in
        var word = word
        let firstCharacter = word.removeAtIndex(word.startIndex)
        return String(firstCharacter).uppercaseString + word
    }.joined(separator: " ")

    return headline
}

【讨论】:

  • 您的代码有效,但是闭包内的 var word 和 (word) 有什么区别?这对我来说就像是困惑。顺便说一句,非常感谢您的回复。
  • 我不明白你的问题,如果这是一个问题
  • 当您说var word = word 时,编译器如何区分闭包参数和本地可变副本?
  • 可变副本遮蔽不可变参数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多