добавить в функцию инициализации на расширение UIButton - PullRequest
0 голосов
/ 14 декабря 2018

Я хочу добавить пользовательский init в класс UIButton, используя расширение

extension UIButton {
    init() {
        backgroundColor = InterfaceDesign.button.backgroundColor
        setTitleColor(InterfaceDesign.button.textColor, for: .normal)
    }
}

Первая проблема заключается в этой ошибке:

Указанный инициализатор не может быть объявлен в расширении«UIButton»;Вы имели в виду, что это удобный инициализатор?

Тогда, если я нажму на красную белую точку, чтобы исправить это, она вставит удобство впереди так:

convenience init()

Нотогда эта ошибка возникает:

Инициализатор 'init ()' с селектором Objective-C 'init' конфликтует с неявным инициализатором 'init ()' с тем же селектором Objective-C

Я уже пробовал гуглить, но нашел только рабочий код для подклассов uibutton ...

Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Вы не можете делать то, что пытаетесь сделать.Для этого есть две взаимодействующие причины.

  1. Нельзя изменить назначенный классу инициализатор из расширения.
  2. Вы можете создать удобный инициализатор врасширение, но удобный инициализатор не может быть переопределением существующего инициализатора.

Вы пытаетесь переопределить init().Вы не можете сделать это.Вам потребуется создать вспомогательный инициализатор, параметры которого отличаются от параметров любого существующего инициализатора, и этот вспомогательный инициализатор должен в конечном итоге вызвать назначенный инициализатор.

0 голосов
/ 14 декабря 2018
struct Dummy { }

extension UIButton {
    convenience init(dummy: Dummy) {
        self.init()
        backgroundColor = InterfaceDesign.button.backgroundColor
        setTitleColor(InterfaceDesign.button.textColor, for: .normal)
    }
}

UIButton(dummy: Dummy())
...