Swift - вызов функции внутри инициализатора и определение ее снаружи - PullRequest
0 голосов
/ 29 января 2020

Я новичок в Swift и у меня возникли проблемы с пониманием следующих строк кода, встречающихся для подкласса UITabBar:

override init(frame: CGRect) {
  super.init(frame: frame)
  customInit()
  }
		
required init?(coder aDecoder: NSCoder) {
  super.init(coder: aDecoder)
  customInit()
  }

func customInit(){
  self.tintColor = .white
  self.barTintColor = .white
  self.backgroundColor = .white
  }

Извините, если это может показаться глупым вопросом, но зная, что функции должны быть определены перед вызовом, а свойства в инициализаторе должны быть перед "super.init" Мне интересно, что два вызова customInit () расположены, где они находятся?

Опять же, я новичок в Swift и действительно пытаюсь понять, как это работает, но нигде не нашел подходящих ответов.

Заранее большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 29 января 2020

У вас есть Две опции для использования вашего пользовательского класса, например, CustomTabBar,

  1. Создание этого класса в коде
  2. Использование его в раскадровке

Итак, существует два типа инициализаторов:

  1. init(frame: CGRect), которые будут вызываться, если вы инициализировали этот класс из кода, например, CustomTabBar(frame: CGRect(.zero))

  2. required init?(coder aDecoder: NSCoder), который будет вызываться автоматически, если вы используете этот пользовательский класс в раскадровке.

почему он пишет код в отдельном развлечении c вне инициализации?

Чтобы не дублировать этот код в обоих методах инициализации.

инициализатор должен быть перед "super.init?

Зависит от того, нужно ли вам сначала вызовите super или вашу реализацию, и я вижу, что вы меняете только цвета, поэтому вам нужно сначала инициализировать его, чтобы изменить его цвета и стили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...