Sobes.tech
Junior — Middle

Kako pratiti pozive metode viewDidLoad u svim instancama kontrolera u aplikaciji?

sobes.tech АИ

Одговор од АИ

За праћење позива методе viewDidLoad у свим примерцима контролера у iOS-у, можете користити метод swizzling — динамичку замену реализације метода у току извршавања.

Пример у Swift-у:

import UIKit

extension UIViewController {
    static let swizzleViewDidLoad: Void = {
        let originalSelector = #selector(viewDidLoad)
        let swizzledSelector = #selector(swizzled_viewDidLoad)

        guard let originalMethod = class_getInstanceMethod(UIViewController.self, originalSelector),
              let swizzledMethod = class_getInstanceMethod(UIViewController.self, swizzledSelector) else { return }

        method_exchangeImplementations(originalMethod, swizzledMethod)
    }()

    @objc func swizzled_viewDidLoad() {
        // Позив на оригинални `viewDidLoad` (сад `swizzled_viewDidLoad`)
        swizzled_viewDidLoad()

        // Логовање или друга логика
        print("Позив `viewDidLoad` за \(type(of: self))")
    }
}

// Позовите swizzling једном, нпр. у AppDelegate-у
UIViewController.swizzleViewDidLoad

Овај приступ омогућава да се ухвате позиви viewDidLoad за све контролере без измене њиховог извора кода.