【发布时间】:2022-01-15 08:19:46
【问题描述】:
我有一个包含原始值和掷骰子的结构
var diceRoll: Int {
Int.random(in: 1...6)
}
struct Score {
var raw: Int
let roll: Int
init(_ raw: Int) {
self.raw = raw
self.roll = diceRoll
}
init(raw: Int, roll: Int) {
self.roll = roll
self.raw = raw
}
}
还有两个玩家,所以将值保存在一个元组中
var (myScore, hisScore) = (Score(4), Score(3))
当我需要为玩家的分数添加或减去修饰符时,我使用 (Int, Int) 的元组
(1, -1)
并使用自定义运算符修改分数
func +(lhs: (Score, Score), rhs: (Int, Int)) -> (Score, Score) {
(Score(raw: lhs.0.raw + rhs.0, roll: lhs.0.roll), Score(raw: lhs.1.raw + rhs.1, roll: lhs.1.roll))
}
而不是像这样使用加法和分配来修改分数:
(myScore, hisScore) = (myScore, hisScore) + (1, -1)
我想我可以使用这个赋值运算符
func +=(lhs: inout (Score, Score), rhs: (Int, Int)) {
lhs = lhs + rhs
}
但是
(myScore, hisScore) += (1, -1)
给出这个错误:
二元运算符“+=”不能应用于“(Score,Score)”和“(Int,Int)”类型的操作数
我认为这与元组的分配方式有关,但有谁知道问题出在哪里,是否可以让它工作?
【问题讨论】:
标签: swift tuples assignment-operator