【发布时间】:2017-01-16 03:07:17
【问题描述】:
这行得通
class Die {
let faces: Int
required init(faces: Int) {
self.faces = faces
}
func yahtzeeDice() -> [Die] {
return [Die](repeating: type(of: self).init(faces: 6), count: 5)
}
}
这似乎违反了 DRY。可以在yahtzeeDice函数中间接引用Die吗?
【问题讨论】:
-
你说的是
yahtzeeDice()的方法签名中的[Die]还是body?后者可以替换为Array,因为可以推断出Die的元素类型。 -
无关:为什么
yahtzeeDice()是一个实例方法?您可以将其设为static/class方法,然后使用self而不是type(of: self)。 -
你不能在签名中使用
[Self],因为数组是一个结构,如果A : B那么[A]和[B]仍然是不相关的类型。 -
还要注意,上面
[Die]数组的重复初始化器用实例化一个Die实例,此后重复引用这个实例5在数组(因为Die是引用类型)。即,[Die]的所有成员都持有对同一底层Die实例的强引用。 -
间接引用它的目的是什么,即您要解决什么问题?您是否打算经常更改课程名称?
标签: swift