我正在尝试制作这样的课程:
class Brick2 : SKShapeNode {
override convenience init() {
self.init(rectOf: CGSize(width: UIScreen.main.bounds.width/5, height: UIScreen.main.bounds.width/5), cornerRadius: UIScreen.main.bounds.width/20)
}
代码可以编译,但是当我在模拟器中启动应用程序时,它会崩溃。
问题是在另一个类中它起作用:
class Sidebar : SKShapeNode {
convenience init(rectOf: CGSize, cornerRadius: CGFloat, y: CGFloat) {
self.init(rectOf: rectOf, cornerRadius: cornerRadius)
self.position = CGPoint(x: UIScreen.main.bounds.width, y : y)
}
}
如果我不使用带有参数的init覆盖它,它会起作用,但不会覆盖它。
我想在不传递任何参数的情况下实例化Brick2类,因为所有积木的大小都相同。
编辑:Xcode中的错误是“线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x7ffee4f8fff8)”
答案 0 :(得分:0)
您尝试覆盖的init()
似乎不属于 SKShapeNode 或其超类 SKNode 或其超类 UIResponder < / strong>;但这会覆盖根类 NSObject 的init()
。
实际上,您不能覆盖指定的初始化器(init()
),而不能使用便捷初始化器(init(rect:cornerRadius:)
)来初始化对象。
为达到您要实现的目标,我建议这样做:
class Brick2: SKShapeNode {
// Make init() inaccessible to other classes, to prevent the accidental usage of the same,
// instead of the expected instance() method call.
private override init() {
super.init()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
class func instance() -> Brick2 {
return Brick2(rectOf: CGSize(width: UIScreen.main.bounds.width / 5,
height: UIScreen.main.bounds.width / 5),
cornerRadius: UIScreen.main.bounds.width / 20)
}
}
然后,您可以使用以下方法初始化 Brick2 实例:
let brick = Brick2.instance()