gpt4 book ai didi

ios - 在 Swift 中没有参数的便利初始化?

转载 作者:搜寻专家 更新时间:2023-10-31 23:06:46 24 4
gpt4 key购买 nike

我正在尝试创建一个这样的类:

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 中的错误是:

Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffee4f8fff8)

最佳答案

看起来您尝试覆盖的 init() 不属于 SKShapeNode 或其父类(super class) SKNode 或其父类(super class)UIResponder;但它覆盖了根类 NSObjectinit()

实际上,您不能覆盖指定的初始化程序 (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()

关于ios - 在 Swift 中没有参数的便利初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52899568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com