gpt4 book ai didi

ios - 奇怪的元类型初始化错误

转载 作者:行者123 更新时间:2023-11-28 07:12:54 25 4
gpt4 key购买 nike

我有这个类(class)的小黄人

class GameObject : SKShapeNode {
var health : Int!
}

class Character : GameObject {
var cost : Int!
var movementSpeed : Int!
var damage : Int!
var specials : [Special] = []
required override init() {
super.init()
}
}

class Minion : Character {
required init() {
super.init()
self.cost = 2
self.movementSpeed = 21
self.damage = 2
self.path = SKShapeNode(rectOfSize: CGSizeMake(50, 50)).path
self.fillColor = UIColor.redColor()
}
}

如果我想实例化此类的元类型,我可以这样做。

let a = Minion.self()

没有错误或崩溃。

但是...如果我尝试这样做。

let b = Minion.self
let ax = b() << NO ERROR BUT CRASHES

我收到 BAD_ACCESS_CODE 崩溃。这也会崩溃。

let b : Minion.Type = Minion.self
let ax = b()

有人有什么想法吗?

最佳答案

在我看来,您已经设法说服编译器让您做一些您不应该做的事情。

如果您从层次结构中删除了您的 GameObject 类型,并且只是让 Character 继承自 SKShapeNode,那么您会遇到编译器错误初始化:

error: 'required' initializer 'init(coder:)' must be provided by subclass of 'SKShapeNode'
}
^
SpriteKit.SKShapeNode:109:34: note: 'required' initializer is declared in superclass here
@objc(initWithCoder:) required init?(coder aDecoder: NSCoder)

然而不知何故,通过在没有用户定义的 init 方法的情况下将 GameObject 插入中间,它会让你在编译时摆脱它 - 但不是在运行时。

看起来你的问题与这个相似,但不一定相同here同样的解决方案可能会有所帮助。

关于ios - 奇怪的元类型初始化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27680762/

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