Sobes.tech
Junior — Middle

Kaip galima stebėti viewDidLoad metodo iškvietimus visuose valdiklių pavyzdžiuose programoje?

sobes.tech AI

Atsakymas iš AI

Norint stebėti viewDidLoad metodo iškvietimus visuose iOS kontrolerių egzemplioriuose, galite naudoti swizzling metodą — dinamišką metodo įgyvendinimo pakeitimą vykdymo metu.

Pavyzdys Swift kalba:

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() {
        // Originalo `viewDidLoad` iškvietimas (dabar `swizzled_viewDidLoad`)
        swizzled_viewDidLoad()

        // Žurnalo įrašymas ar kita logika
        print("`viewDidLoad` iškviestas \(type(of: self))")
    }
}

// Vieną kartą iškvieskite, pvz., AppDelegate
UIViewController.swizzleViewDidLoad

Šis požiūris leidžia pagauti viewDidLoad iškvietimus visų kontrolerių, nekeičiant jų šaltinio kodo.