无法在一成不变的值使用可变成员的封闭
我试图利用一个串的每个单词的第一个字母里面,我有以下代码:无法在一成不变的值使用可变成员的封闭
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
}
不过,我得到以下错误:
Cannot use mutating member on immutable value: 'word' is a 'let' constant.
我试图字(var word)
之前添加变种,但我得到的错误:
Parameters may not have the 'var' specifier.
我该如何解决这个问题?
做一个本地副本可变:
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内幕之间的关闭和(单词)?这对我来说很困惑。顺便说一句,非常感谢你的回复。 – lmiguelvargasf
我不明白你的问题,如果这是一个问题 – Alexander
当你说'var word = word'编译器如何区分闭合参数和局部可变副本? – lmiguelvargasf
http://stackoverflow.com/q/29261218/2303865 –
@LeoDabus,谢谢你,但我想实现这个功能我自己,因为TDD课程我在追随。绝对是你的解决方案避免重新发明轮子。 – lmiguelvargasf
我会建议使用https://developer.apple.com/reference/foundation/nsstring/1416774-enumeratesubstringsbyWords选项 –