Ответ 1
Назначенный инициализатор подкласса должен вызвать назначенный инициализатор Суперкласса. Инициализатор удобства может вызывать только другой инициализатор удобства или назначенный инициализатор этого класса.
init() является инициализатором удобства для UIView, если вы подклассифицируете UIView, вы должны вызвать его назначенный инициализатор, который является init (frame: frame)
override init() {
super.init(frame: frame)
// Some init logic ...
}
EDIT: очевидно, что в бета-версии 3 UIView не имеет инициализатора удобства, называемого init, поэтому вам нужно также удалить ключевое слово переопределения, теперь это назначенный инициализатор, поэтому вам нужно вызвать инициализатор, обозначенный суперклассом
init() {
super.init(frame: frame)
// Some init logic ...
}
EDIT: Хотя это работает, но я думаю, что лучший способ написать это:
convenience init() {
self.init(frame:CGRectZero)
}
Источник: Быстрая документация
Правило 1 Назначенный инициализатор должен вызывать назначенный инициализатор от его непосредственного суперкласса.
Правило 2 Инициализатор удобства должен вызвать другой инициализатор из тот же класс.
Правило 3 Инициализатор удобства должен в конечном итоге вызвать назначенный инициализатор.