我想在其中创建带有方法的结构,使用switch语句打开实例的属性,并将self
附加到正确的数组。
尝试这一点,但这是错误的:
struct Workout {
enum Stroke {
case freestyle, butterfly
}
var distance : Double
var time: Double
var stroke: Stroke
var freestyleArray : [Workout] = []
var butterflyArray : [Workout] = []
mutating func saveToArray () {
switch stroke {
case .freestyle : freestyleArray.append(self)
case .butterfly : butterflyArray.append(self)
}
}
}
答案 0 :(得分:0)
你所做的事情在技术上完全没问题。您知道struct
是通过复制传递的。因此,如果你在self
func中传递mutating
没问题,因为每当你这样做时,你传递的是一个结构的副本,这会导致突变并重新创建初始结构实例/复制。
struct Workout {
enum Stroke {
case freestyle, butterfly
}
var distance : Double
var time: Double
var stroke: Stroke
var freestyleArray : [Workout] = []
var butterflyArray : [Workout] = []
mutating func saveToArray () {
switch stroke {
case .freestyle : freestyleArray.append(self)
case .butterfly : butterflyArray.append(self)
}
}
}
var wo = Workout(distance: 10,
time: 10,
stroke: .butterfly,
freestyleArray: [],
butterflyArray: [])
wo.saveToArray()
wo.saveToArray()
// prints 2
print("butterfly array count: \(wo.butterflyArray.count)")
但是,如果这正是您的问题 - 语义相同的实例的乘法,那么您绝对应该使用class
而不是struct
。这样,您就可以通过引用比较类的实例(在附加之前,如果这是关注的话)。要比较struct
,您必须引入标识符进行区分。