Swift 无法更改数组中的元组

Swift 无法更改数组中的元组,swift,Swift,但是,当我尝试 emo=(类型:emo.type,强度:increaseStrength(emo.strength)) 这给了我错误 “无法分配给'let'值'emo' 这是我的密码: var emotions : [(type : String, strength: Int)] = [("happy",0),("scared",0),("tender",0),("excited",0),("sad",0)] func increaseStrength(i:Int)->Int {

但是,当我尝试

emo=(类型:emo.type,强度:increaseStrength(emo.strength))
这给了我错误

“无法分配给'let'值'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)
}

如果有更好的方法来完成赋值,请告诉我,我非常感激!谢谢..

即使您能够完成,也没有必要将赋值给
emo
。这与替换数组中的相应对象不同-这是您想要做的。
emo
是一个副本;即使您要设置它的属性,它不会影响数组中的变量。当然,设置变量不会神奇地读回数组

这里有一个解决方案。不要在for循环中循环遍历
情绪,而是循环遍历
枚举(情绪)
。现在您有了一个包含索引号和情绪的元组。如果这是正确的情绪类型,请通过索引号写入数组

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
    }
}

嗨,马特,谢谢你详细的回答并教我如何使用地图,我最美好的祝愿!顺便说一句@Matt,我很高兴我以前看过你的书,你是一个很棒的作家,一旦你发行就会买你最新的书。@Yank很乐意帮忙!我个人更喜欢
map
。在这种情况下,代码行数更多,但它清楚地描述了什么你要对你的数组做些什么。我很高兴得到你的答案,我也喜欢map,我在大学里做过计算科学成绩,map更合理,使代码看起来更专业XD
emo
是一个副本,因为它是一个元组,对吗?如果它是一个对象,在循环中编辑
emo