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更合理,使代码看起来更专业XDemo
是一个副本,因为它是一个元组,对吗?如果它是一个对象,在循环中编辑emo
?