EEYatHo 앱 깎는 이야기

SwiftUI ) Deinit 감지하기 - EEYatHo iOS 본문

iOS, Swift/Tip, Bug, Swift Error

SwiftUI ) Deinit 감지하기 - EEYatHo iOS

EEYatHo 2024. 2. 1. 18:39
반응형

 

 

SwiftUI 에는 뷰의 생명주기로 onAppear과 onDisappear만 제공한다.

 

나는 deinit을 감지하고 싶다..

하지만 Struct는 deinit을 오버라이드 할 수 없는걸?

 

class의 도움을 받는다.

 

DeinitDetector


/// 구조체의 deinit을 확인하기위한 class
final class DeinitDetector<T> {
    
    deinit {
        var typeString = "\(type(of: T.self))"          /// "SomeView.Type"
        typeString.removeLast(5)                        /// "SomeView"
        print("🖐🖐🖐 \(typeString): \(#function)")      /// "🖐🖐🖐 NotificationView: deinit"
        
        deinitCompletion?()
    }

    private var deinitCompletion: (() -> Void)?
    public init(_ deinitCompletion: (() -> Void)? = nil) {
        self.deinitCompletion = deinitCompletion
    }
    
    public func setCompletion(_ deinitCompletion: (() -> Void)?) {
        self.deinitCompletion = deinitCompletion
    }

}

 

 

 

사용법


import SwiftUI

struct SomeView: View {
	
    private let deinitDetector = DeinitDetector<Self>() {
        // deinit 시 하고싶은 일들~
    }
    
    // ...
}
Comments