我不确定是否正确,我试图将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会像我预期的结果那样出现。
预先感谢,以供参考,以下是提示:
将一个实例方法添加到SwimmingWorkout中,名为save(),它不接受任何参数,也没有返回值。此方法将将其实例添加到SwimmingWorkout上的静态数组中,该数组对应于其游动笔画。在save()中编写一个开关语句,该语句切换实例的笔画属性,并将self附加到适当的数组中。调用上面创建的两个SwimmingWorkout实例的保存,然后打印应该添加它们的数组,以查看保存方法是否正常工作。
发布于 2018-04-28 08:58:33
您需要实现CustomStringConvertible并实现description属性以返回SwimmingWorkout结构的字符串表示形式。
另外,由于您的预期输出将一个数字与每个游泳(swim1、swim2)关联起来,您可能也应该添加一个id属性。
下面是您修改过的SwimmingWorkout结构:
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))"
}
}发布于 2018-04-28 08:47:30
删除
enum Stroke {
case freestyle, butterfly, backstroke, breaststroke
}从struct SwimmingWorkout中写出它的"struct“,你的代码应该是正确的。
https://stackoverflow.com/questions/50074361
复制相似问题