반응형
LinkedIn 개발자로 성장하면서 남긴 발자취들을 확인하실 수 있습니다.
Github WWDC Student Challenge 및 Cherish, Tiramisul 등 개발한 앱들의 코드를 확인하실 수 있습니다.
개인 앱 : Cherish 내 마음을 들여다보는 시간, 체리시는 디자이너와 PM과 함께 진행 중인 1인 개발 프로젝트입니다.
10년 후, 20년 후 나는 어떤 스토리 텔러가 되어 있을지 궁금하다. 내가 만약에 아직 조금 더 탐구하고 싶은 게 있고, 궁금한 게 있다면, 그게 설사 지금 당장의 내 인생에 도움이 안 되는 것 같더라도 경험해보자. 그 경험들을 온전히 즐기며 내 것으로 만들고, 내 일에 녹여내고... 그러다보면 그 점들이 모여 나란 사람을 그려내는 선이 될 테니까.

Recent Posts
Recent Comments
Total
관리 메뉴

꿈꾸는리버리

SwiftUI에서 modifier 분기 처리하기 본문

오뚝이 개발자/SwiftUI

SwiftUI에서 modifier 분기 처리하기

rriver2 2022. 9. 16. 22:25
반응형

만약 iOS가 14일 때만 foreground를 red로 주고 싶다고 하자.

 

1. View를 분기 처리 하기

struct ContentView: View {
     var body: some View {
         if #available(iOS 14.0, *) {
             Text("iOS 14.0")
                 .padding()
                 .foreground(Color.red)
         } else {
             Text("iOS 14.0 아님")
                 .padding()
         }
     }
 }

 

2. modifier를 분기 처리 하기

이렇게 View extension에 분기 처리를 할 수 있는 함수를 추가하고,

extension View {
    /// Applies the given transform if the given condition evaluates to `true`.
    /// - Parameters:
    ///   - condition: The condition to evaluate.
    ///   - transform: The transform to apply to the source `View`.
    /// - Returns: Either the original `View` or the modified `View` if the condition is `true`.
    @ViewBuilder func `if`<Content: View>(_ condition: Bool, transform: (Self) -> Content) -> some View {
        if condition {
            transform(self)
        } else {
            self
        }
    }
}

 

해당 bool 값을 이용해서 적용할 수 있다.

extension Bool {
     static var iOS14: Bool {
         guard #available(iOS 14, *) else {
             // 14가 아닐 때
             return false
         }
         // 14 일 때
         return true
     }
 }

struct ContentView: View {
    
    var body: some View {
             Text("iOS 14.0 아님")
                 .padding()
                 .if(.iOS14) { view in
                 	// 14일 때만 적용이 됨
                	view.foreground(Color.red)
            	 }
    }
}
반응형
Comments