我想通过代码创建一个UIView
,我需要知道4个变量来绘制此UIView
。
但是我无法初始化此子类。
这是我的代码:
class CardView: UIView, UIGestureRecognizerDelegate{
private(set) var character: Int
private(set) var numberOfCharacters: Int
private(set) var shading: Int
private(set) var color: Int
private(set) var identifier: Int
init(frame: CGRect, card: Card) {
self.character = card.character
self.numberOfCharacters = card.numberOfCharacters
self.color = card.color
self.shading = card.shading
self.identifier = card.identifier
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder) //Error: Property 'self.character' not initialized at super.init call
}
}
我有什么想念吗?
答案 0 :(得分:1)
出现该错误是因为在调用super.init
之前,您没有为每个未初始化的属性都赋予一个值,而在调用init(coder:)
时,您尚未为fatalError
中的所有属性赋予值初始化程序,因此出现错误。
您只需在初始化程序中调用required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
:
fatalError
在此处调用UIView
是可以接受的,因为您只是通过代码创建NSCoder
,因此不会调用上述初始化程序。当您从XIB或情节提要中加载视图时,它会被 调用,在这种情况下,您必须解码{{1}}中的值并分配属性。
答案 1 :(得分:0)
我认为问题出在变量上,这些变量没有初始化,因此只有您可能会得到错误。因此,请为变量设置一些值,然后像下面这样声明它们。
private(set)var character:Int!