Как создать общую функцию в расширении UIViewcontroller? - PullRequest
0 голосов
/ 15 сентября 2018

Мне нужно запустить общую функцию для всех контроллеров UIView без указания вручную «self.function ()»

Ответы [ 3 ]

0 голосов
/ 15 сентября 2018

Просто добавьте свои пользовательские методы в UIViewController, используя расширение:

extension UIViewController {

   func customFunc() {
      print("Custom func is called")
   }
}

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

class MainVC: UIViewController {

   override func viewDidLoad() {
    super.viewDidLoad()

   //call your func
   customFunc()
   }

}
0 голосов
/ 17 сентября 2018

Я думаю, что невозможно swizzle viewDidload () в swift4, хотя это возможно раньше путем swizzling, вместо этого вы можете сделать это по наследству

Class BaseVC: UIViewController {
    func viewDidLoad() {
    super.viewDidLoad() 
  /// customization here … e.g self.function() 
    }
}

Class CustomVC: BaseVC {
 func viewDidLoad() {
    super.viewDidLoad() 
     // you had called self.function no need to do it again 
    }
}
0 голосов
/ 15 сентября 2018

Единственный способ переопределить функцию в классе, который нельзя изменить (например, базовый класс UIViewController), - это использовать метод swizzling.

Как swizzle init в Swift

Вы используете эту технику, чтобы взмахнуть viewDidLoad или viewDidAppear.

В большинстве случаев вам следует просто создать подкласс UIViewController для своих нужд и вызвать свою функцию впереопределение метода жизненного цикла.

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