Sobes.tech
Junior — Middle

Чӣ гуна метавон фароии функсияи viewDidLoad-ро дар ҳама нусхаҳои контроллерҳо дар барнома пайгирӣ кард?

sobes.tech AI

Ҷавоб аз AI

Барои пайгирии зангҳои усули 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() {
        // Звон ба усули аслӣ (ҳоло swizzled_viewDidLoad)
        swizzled_viewDidLoad()

        // Логгирӣ ё дигар мантиқ
        print("Занг ба `viewDidLoad` барои \(type(of: self))")
    }
}

// Як бор занг занед, масалан дар AppDelegate
UIViewController.swizzleViewDidLoad

Ин усул имкон медиҳад, ки зангҳои viewDidLoad барои ҳама контролерҳоро бидуни тағир додани коди манбаъ пайгирӣ кунед.