我被困在初始化UIView的子类

时间:2018-08-25 06:57:43

标签: ios swift uiview initialization

我想通过代码创建一个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
    }
}

我有什么想念吗?

2 个答案:

答案 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!