首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将实例变量的属性保存到Struct的静态变量数组中

将实例变量的属性保存到Struct的静态变量数组中
EN

Stack Overflow用户
提问于 2018-04-28 08:10:54
回答 2查看 589关注 0票数 1

我不确定是否正确,我试图将Struc的一个实例保存到一个静态变量数组中,但是实例的名称没有添加到数组中.下面的代码如下:

代码语言:javascript
复制
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")
        }
    }
}

我期待着

代码语言:javascript
复制
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)
}

应产生产出:

代码语言:javascript
复制
swim1(distance: 100.0, time: 180.0, stroke: Stroke.butterfly)
swim2(distance: 200.0, time: 320.0, stroke: Stroke.butterfly)

但我明白:

代码语言:javascript
复制
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会像我预期的结果那样出现。

预先感谢,以供参考,以下是提示:

将一个实例方法添加到SwimmingWorkout中,名为save(),它不接受任何参数,也没有返回值。此方法将将其实例添加到SwimmingWorkout上的静态数组中,该数组对应于其游动笔画。在save()中编写一个开关语句,该语句切换实例的笔画属性,并将self附加到适当的数组中。调用上面创建的两个SwimmingWorkout实例的保存,然后打印应该添加它们的数组,以查看保存方法是否正常工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-28 08:58:33

您需要实现CustomStringConvertible并实现description属性以返回SwimmingWorkout结构的字符串表示形式。

另外,由于您的预期输出将一个数字与每个游泳(swim1swim2)关联起来,您可能也应该添加一个id属性。

下面是您修改过的SwimmingWorkout结构:

代码语言:javascript
复制
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))"
    }
}
票数 1
EN

Stack Overflow用户

发布于 2018-04-28 08:47:30

删除

代码语言:javascript
复制
enum Stroke {
        case freestyle, butterfly, backstroke, breaststroke
    }

struct SwimmingWorkout中写出它的"struct“,你的代码应该是正确的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50074361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档