斯威夫特3 - 有问题的功能
问题描述:
我试图从每个数组中的单词串采取的最后一个字符变异阵列的价值:斯威夫特3 - 有问题的功能
var nonsenseArray = ["bungalow", "buffalo", "indigo", "although", "Ontario", "albino", "%$&#!"]
,并创建一个字符串每个字符在函数内使用for-loop。我觉得我有一个很好的答案,但我得到以下错误:
cannnot use mutating member on immutable value: "every" is a "let" constant
下面是我的代码:
func combineLastCharacters(array: [String]) -> String {
var myString = ""
var array = array
for every in array {
myString = "\(every.remove(at: every.index(before:
every.endIndex)))" + myString
}
return myString
我从其他的答案发现,通过使用:
var array = array
数组应该变成可变的,所以我可以使用它的remove方法。任何帮助是极大的赞赏。
我想创建的字符串是“呜呼!”
答
array
可能是可变的,但every
不是,并且remove(at:)
正试图对它进行变异。另外,你在字符串的开始追加字符。试试这个:
func combineLastCharacters(array: [String]) -> String {
var myString = ""
for var every in array {
myString += "\(every.remove(at: every.index(before:
every.endIndex)))"
}
return myString
}
或者只是:
func combineLastCharacters(array: [String]) -> String {
return array.reduce("", { $0 + String($1.characters.last!) })
}
答
你不能改变。可变every
,因为它被定义为let
常数,无法改变,我想你想substring
而不是remove
:
func combineLastCharacters(array: [String]) -> String {
var myString = ""
for every in array {
myString = "\(every.substring(from: every.index(before: every.endIndex)))" + myString
}
return myString
}
现在我得到一个编译器警告,并没有输出,当我尝试打印功能。警告是:“变量数组从未突变:考虑更改为'let'常量”。我用你的建议在每个之前加var,并且解决了第一个问题。 –
@Cali_Ranger关于编译器警告,请注意当复制函数时,我删除了'var array = array'行。关于没有输出:你打印什么代码? –
我认为是由于编译器警告导致输出不足。一旦我删除了'var array = array',代码就工作了。 –