如何在里面附加数组创建结构呢?

时间:2017-11-21 07:16:05

标签: swift struct enums switch-statement

我想在其中创建带有方法的结构,使用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)
        }
    }
}

1 个答案:

答案 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,您必须引入标识符进行区分。