[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🍎 Apple/Swift

[Swift] Method Swizzling

inu 2022. 4. 10. 22:17
반응형

Method Swizzling?

개념

Method Swizzling은 원래의 메서드를 runtime에 원하는 메서드로 변경해 사용할 수 있도록 하는 기법입니다.

 

UIViewController의 viewWillAppear같은 메서드를 원하는 메서드로 변경해 여러 ViewController에 한번에 작업을 적용하는 방식으로도 사용이 가능합니다.

 

예를 들어 앱 분석기능을 적용하는 경우 여러 ViewController에 같은 동작을 수행해야하는 경우가 있습니다. 이럴 때 하나씩 적용하는 것보단, Method Swizzling으로 한번에 처리하는 것이 효율적인 것이지요.

 

사용예시

import UIKit

extension UIViewController {

    static func methodSwizzling() {

        let originalSelector = #selector(viewWillAppear)
        let swizzledSelector = #selector(swizzledViewWillAppear)

        if let origin = class_getInstanceMethod(UIViewController.self, originalSelector),
            let swizzle = class_getInstanceMethod(UIViewController.self, swizzledSelector) {
            method_exchangeImplementations(origin, swizzle)
        }

    }

    @objc
    func swizzledViewWillAppear() {
        print("swizzledViewWillAppear")
    }

}

Method Swizzing은 위와 같은 코드로 적용이 가능합니다. 그리고 앱의 시작과정 혹은 필요한 곳에서

UIViewController.methodSwizzling()

이를 호출하는 것으로 작업을 처리할 수 있습니다.

현재 제가 수행중인 프로젝트에 적용해보니 결과가 잘나오네요!

반응형

'🍎 Apple > Swift' 카테고리의 다른 글

[Swift] 순열과 조합 구현  (2) 2022.04.25
[Swift] Queue (Deque) 구현  (0) 2022.04.25
[Swift] Localizing (NSLocalizedString)  (5) 2022.04.10
[Swift] Generic  (0) 2022.03.07
[Swift] NotificationCenter  (0) 2022.03.07