Какой инициализатор называется для удобства инициализации UIViewController? - PullRequest
0 голосов
/ 22 января 2019

Я часто использую вспомогательный init в UIViewController для создания пользовательского инициализатора.

Но я не знаю, какой существующий инициализатор UIViewController вызывается, когда self.init().

Это public init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)?

Что называется, когда self.init() в удобной инициализации UIViewController?

final class SampleViewController: UIViewController {
    private var component: Component?

    convenience init(component: Component) {  // Custom initializer
       self.init()  // What is this initializer?
       self.component = component
    }

    override func viewDidLoad() {
       ...
    }
    ...
}

Ответы [ 3 ]

0 голосов
/ 22 января 2019

UIViewController - это объект NSO, из UIResponder ...

в NSObject у вас есть инициализация без параметров, это просто создание экземпляра памяти ...

СОВЕТ: Всегда CMD + Нажмите на класс, если что-то выглядит странно ... и перейдите к его корням.

0 голосов
/ 22 января 2019

UIViewController.init звонки UIViewController.init(nibName: nil, bundle: nil). Это означает, что nibName будет равно названию класса, а bundle будет основным.

UIViewController.init - это просто удобный инициализатор. В Swift это может быть реализовано с использованием параметров по умолчанию UIViewController.init(nibName: String? = nil, bundle: NSBundle? = nil), но это старый API Objective-C, и Objective-C не имеет параметров по умолчанию, и поэтому есть отдельное удобство init().

0 голосов
/ 22 января 2019

Зависит от того, как создается экземпляр UIViewController.

Это может быть init(nibName: String?, bundle: Bundle?), когда он вызывается напрямую через код, или init?(coder: NSCoder), если он создается через механизмы Interface Builder (Storyboard Segue, Main View Controller и т. Д.)

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