Сохранение свойств переменной экземпляра в массив статических переменных структуры в Swift - PullRequest
0 голосов
/ 28 апреля 2018

Я не уверен, что если я делаю это правильно, я пытаюсь сохранить экземпляр Struc в массив статических переменных, но имя экземпляра не добавляется в массив ... Вот код ниже:

struct SwimmingWorkout {
    let distance: Double //meters
    let time: Double //Seconds
    let stroke: Stroke

    enum Stroke {
        case freestyle, butterfly, backstroke, breaststroke
    }

    static var freestyleWorkouts = [SwimmingWorkout]()
    static var butterflyWorkouts = [SwimmingWorkout]()
    static var backstrokeWorkouts = [SwimmingWorkout]()
    static var breaststrokeWorkouts = [SwimmingWorkout]()

    func save() {
        switch stroke {
        case .freestyle:
            SwimmingWorkout.freestyleWorkouts += [self]
        case .butterfly:
            SwimmingWorkout.butterflyWorkouts += [self]
        case .backstroke:
            SwimmingWorkout.backstrokeWorkouts += [self]
        case .breaststroke:
            SwimmingWorkout.breaststrokeWorkouts += [self]
        default:
            print("Error")
        }
    }
}

Я ожидаю, что

let swim1 = SwimmingWorkout(distance: 100, time: 180, stroke: .butterfly)
let swim2 = SwimmingWorkout(distance: 200, time: 320, stroke: .butterfly)

swim1.save()
swim2.save()

for workout in SwimmingWorkout.butterflyWorkouts {
    print(workout)
}

должно привести к выводу:

swim1(distance: 100.0, time: 180.0, stroke: Stroke.butterfly)
swim2(distance: 200.0, time: 320.0, stroke: Stroke.butterfly)

но я получаю:

SwimmingWorkout(distance: 100.0, time: 180.0, stroke: __lldb_expr_18.SwimmingWorkout.Stroke.butterfly)
SwimmingWorkout(distance: 200.0, time: 320.0, stroke: __lldb_expr_18.SwimmingWorkout.Stroke.butterfly)

Что мне здесь не хватает? Я даже не совсем уверен, почему stroke: __lldb_expr_18.SwimmingWorkout.Stroke.butterfly так получается по сравнению с моим ожидаемым результатом.

Заранее спасибо, для справки, вот подсказка:

Добавить экземпляр метода к SwimWorkout, который называется save (), который не принимает параметров и не имеет возвращаемого значения. Этот метод добавит свой экземпляр к статическому массиву на SwimWorkout, который соответствует его плаванию. Внутри save () напишите оператор switch, который включает свойство stroke экземпляра и добавляет self к соответствующему массиву. Вызовите save для двух экземпляров SwimWorkout, которые вы создали выше, а затем распечатайте массив (ы), к которым они должны были быть добавлены, чтобы проверить, правильно ли работает ваш метод сохранения.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Вам нужно реализовать CustomStringConvertible и реализовать свойство description, чтобы вернуть строковое представление вашей SwimmingWorkout структуры.

Кроме того, поскольку ваш ожидаемый результат ассоциирует число с каждым заплывом (swim1, swim2), вам, вероятно, следует добавить свойство id.

Итак, вот ваше исправленное SwimmingWorkout struct:

struct SwimmingWorkout: CustomStringConvertible {
    let distance: Double //meters
    let time: Double //Seconds
    let stroke: Stroke

    static var nextID = 1
    let id: Int

    init(distance: Double, time: Double, stroke: Stroke) {
        self.distance = distance
        self.time = time
        self.stroke = stroke
        self.id = SwimmingWorkout.nextID
        SwimmingWorkout.nextID += 1
    }

    enum Stroke {
        case freestyle, butterfly, backstroke, breaststroke
    }

    static var freestyleWorkouts = [SwimmingWorkout]()
    static var butterflyWorkouts = [SwimmingWorkout]()
    static var backstrokeWorkouts = [SwimmingWorkout]()
    static var breaststrokeWorkouts = [SwimmingWorkout]()

    func save() {
        switch stroke {
        case .freestyle:
            SwimmingWorkout.freestyleWorkouts += [self]
        case .butterfly:
            SwimmingWorkout.butterflyWorkouts += [self]
        case .backstroke:
            SwimmingWorkout.backstrokeWorkouts += [self]
        case .breaststroke:
            SwimmingWorkout.breaststrokeWorkouts += [self]
        }
    }

    var description: String {
        return "swim\(id)(distance: \(distance), time: \(time), stroke: Stroke.\(stroke))"
    }
}
0 голосов
/ 28 апреля 2018

Удалить

enum Stroke {
        case freestyle, butterfly, backstroke, breaststroke
    }

из struct SwimmingWorkout и запишите его из "struct", и ваши коды должны быть правильными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...