我正在尝试更改数组中的元组,但是,当我尝试
emo = (type:emo.type,strength:increaseStrength(emo.strength))
时
它给了我错误
"cannot assign to 'let' value 'emo'
这是我的代码:
var emotions : [(type : String, strength: Int)] = [("happy",0),("scared",0),("tender",0),("excited",0),("sad",0)]
func increaseStrength(i:Int)->Int {
switch i {
case 0: return 1
case 1: return 2
case 2: return 3
case 3: return 0
default :return 0
}
}
@IBAction func HappyBA(sender: AnyObject) {
for emo in emotions {
if (emo.type == "happy" ){
emo = (type:emo.type,strength:increaseStrength(emo.strength))
}
}
println(emotions)
}
如果有更好的方法来完成作业,请告诉我,我很感激!谢谢..
答案 0 :(得分:8)
即使您可以这样做,也无法指定emo
。这与替换数组中的相应对象不同 - 这是您做想要做的事情。 emo
是副本;即使你要设置它的属性,它也不会影响数组中的一个属性。当然设置变量不会神奇地读回数组!
这是一个解决方案。而不是在for循环中循环emotions
,而是循环enumerate(emotions)
。现在你有一个索引号的元组和一个情绪。如果这是正确的情绪类型,请通过索引号写入数组。
for (ix,emo) in enumerate(emotions) {
if emo.type == "happy" {
emotions[ix] = (type:emo.type,strength:increaseStrength(emo.strength))
}
}
或者您可以使用map
。
emotions = emotions.map {
emo in
if emo.type == "happy" {
return (type:emo.type,strength:increaseStrength(emo.strength))
} else {
return emo
}
}