Я застреваю с инициализацией подкласса UIView - PullRequest
0 голосов
/ 25 августа 2018

Я хочу создать 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 голосов
/ 25 августа 2018

Я думаю, что проблема с переменными, они не инициализированы, поэтому только вы можете получить ошибки.Поэтому, пожалуйста, установите некоторое значение для переменных, объявите их, как показано ниже:

private(set) var character: Int!
0 голосов
/ 25 августа 2018

Ошибка возникает из-за того, что вы должны присвоить каждому неинициализированному свойству значение в каждом указанном инициализаторе, прежде чем вызывать super.init Вы не указали значение для всех своих свойств в инициализаторе init(coder:), следовательно,ошибка.

Вы можете просто позвонить fatalError в инициализаторе:

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

Вызов fatalError здесь допустим, потому что вы создаете UIView только по коду, поэтому вышеинициализатор не будет вызван.Она будет вызываться , когда вы загрузите свое представление из XIB или раскадровки, и в этом случае вам придется декодировать значения из NSCoder и назначить свойства.

...