无法更改数组中的元组

时间:2015-01-13 05:39:50

标签: swift

我正在尝试更改数组中的元组,但是,当我尝试 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)
}

如果有更好的方法来完成作业,请告诉我,我很感激!谢谢..

1 个答案:

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