Вы можете swizzle (обменять реализацию) UIViewController.viewDidAppear
, чтобы он печатал имя класса. Сначала определите вашу изворотливую реализацию:
extension UIViewController {
@objc func printingViewDidAppear(_ animated: Bool) {
print(String(describing: type(of: self)))
// Call the original implementation. This looks like recursion but isn't
printingViewDidAppear(animated)
}
}
Затем замените реализацию по умолчанию на вашу реализацию следующим образом:
let originalViewDidAppear: Method = class_getInstanceMethod(UIViewController.self, #selector(UIViewController.viewDidAppear(_:)))!
let swizzledViewDidAppear: Method = class_getInstanceMethod(UIViewController.self, #selector(UIViewController.printingViewDidAppear(_:)))!
method_exchangeImplementations(originalViewDidAppear, swizzledViewDidAppear)
Таким образом, вам не нужно менять ни один из существующих контроллеров представления.
Вы должны обязательно вызвать исходную реализацию в конце реализации swizzled. Это похоже на рекурсивный вызов, но это не так. Надеюсь, это поможет.