Sobes.tech
Junior — Middle

Kuidas jälgida meetodi viewDidLoad kõiki eksemplare rakenduses?

sobes.tech AI

Vastus AI-lt

iOS-is kõigi kontrolleri eksemplarite viewDidLoad meetodi väljakutsete jälgimiseks saate kasutada swizzling-meetodit — meetodi dünaamilist asendamist käivitamise ajal.

Näide Swiftis:

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() {
        // Algne `viewDidLoad` väljakutse (nüüd `swizzled_viewDidLoad`)
        swizzled_viewDidLoad()

        // Logimine või muu loogika
        print("`viewDidLoad` kutsutud \(type(of: self))")
    }
}

// Korrake ühel korral, näiteks AppDelegate'is
UIViewController.swizzleViewDidLoad

See lähenemine võimaldab kõigi kontrollijate viewDidLoad väljakutseid kinni püüda, ilma nende lähtekoodi muutmata.