SwiftUI

Swift/SwiftUI os 버전별 분기

garlic 2023. 7. 17. 20:47

Swift - 기존 코드에서 os 버전별로 분기치는 방법

 

if #available(iOS 16.4, *) {
   // iOS 버전이 16.4 이상인 경우 해당 로직 처리
}
else {
   // iOS 버전이 16.4 미만인 경우 해당 로직 처리
}

 

SwiftUI ViewModifier 로 os 버전별 분기치는 방법

 

1번 방법 : if ViewModifier 와 함께 사용하는 방법 

//ios 16.4인지 아닌지 판단하는 변수
extension Bool {
    static var iOS16_4: Bool {
        guard #available(iOS 16.4, *) else {
            return false
        }
        return true
    }
}


// 사용 예시
// Bool을 extension 하여 가독성을 올린다.
CustomView() // 내가 만든 뷰
    .if(.iOS16_4, transform: { view in
        view
        // 추가할 뷰 모디파이어
    })
    
    
    
// 추가 첨부
// if 문 태우는 viewModifier
extension View {
    @ViewBuilder func `if`<Content: View>(_ condition: Bool, transform: (Self) -> Content) -> some View {
        if condition {
            transform(self)
        } else {
            self
        }
    }
}

 

2. 그냥 os 버전 분기 태우는 뷰 모디파이어를 만들어버리기

// View Modifier 생성
struct IsiOS16_4: ViewModifier {

    let completion: () -> Void
    
    init(completion: @escaping () -> Void) {
        self.completion = completion
    }
    
    func body(content: Content) -> some View {
        if #available(iOS 16.4, *) {
            content
	            //ios 버전이 16.4 이상일 때 원하는 뷰 모디파이어 추가 구현
        } else {
            content
        }
    }
}

// View 에 extension 으로 넣어주어 사용하기 쉽도록 함
extension View {
    func isiOS16_4(completion: @escaping () -> Void) -> some View {
        modifier(IsiOS16_4(completion: completion))
    }
}