Sobes.tech
Junior — Middle

Коддо колдонмодо viewDidLoad ыкмасын чакырууларын бардык контроллерлердин мисалдарында кантип көзөмөлдөсө болот?

sobes.tech AI

AIден жооп

iOS-дөгү бардык контроллерлердин бардык үлгүлөрүндө viewDidLoad методуна чакырууларды көзөмөлдөө үчүн, ишке ашыруунун учурунда методуңуздун ишке ашырылышын динамикалык түрдө алмаштырган 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))")
    }
}

// Бир жолу чакырыңыз, мисалы, AppDelegateде
UIViewController.swizzleViewDidLoad

Бул ыкма бардык контроллерлер үчүн viewDidLoad чакырууларын кармап калууга мүмкүндүк берет, алардын баштапкы кодун өзгөртпөстөн.