# SwiftUI를 지금 배워야 하나요?
SwiftUI
는 iOS 13, macOS 10.15, tvOS 13 및 watchOS 6에서 실행되기 때문에 다릅니다. 언급된 OS
만 대상으로 하는 새 앱에서 작업하는 경우 '네'라고 대답합니다. 이 OS
버전을 제어할 수 없는 클라이언트 프로젝트에서 일자리를 찾거나 작업할 계획이라면 SwiftUI
로 전환하기 전에 1 ~ 2 년을 기다리는 것이 좋습니다. 대부분의 클라이언트 작업은 가능한 한 많은 사용자를 지원하기를 원하기 때문에 iOS N-1, N-2 을 지원하는 앱에서 작업해야 합니다. 따라서 SwiftUI
를 적극적으로 활용하는 시기는 1년 정도 후 가 될 것입니다.
# UIKit을 함께 배워야 하나요?
네! UIKit
은 오랫동안 iOS
에서 중요한 부분이 됩니다. 현재 SwiftUI 2.0
에는 많은 기능이 누락되어있고 SwiftUI
가 활발히 사용된다고 해도 UIKit
을 사용해야 하는 경우가 많이 생길 것입니다.
# SwiftUI가 UIKit을 대체할까요?
지금은 아니지만 미래에는 그럴 수 있습니다. 현재 Apple
에서 SwiftUI
를 적극적으로 밀고 있고 업데이트를 하고 있기 때문에 아무 좋은 프레임워크가 될 것입니다. 하지만 UIKit
도 SwiftUI
와 함께 오랫동안 공존할것이고 SwiftUI
가 UIKit
을 완벽히 대체하려면 몇 년은 걸릴 것입니다.
# SwiftUI에서 뷰 컨트롤러는 어디에 있나요?
이제 SwiftUI
에서 View Controller
는 사용되지 않습니다. 그 대체제로는 새로운 프레임워크인 Combine
이 있습니다. 이 Combine
이 UIViewController
을 대체합니다.
# SwiftUI를 사용하기 위한 최소 조건
- SwiftUI 용 Xcode 11 및 iOS 14 기능 용 Xcode 12 베타 ( Apple에서 베타 소프트웨어 다운로드 )
- iOS 13 / macOS 10.15 / tvOS 13 / watchOS 6
- 캔버스에서 SwiftUI를 렌더링 하기 위한 macOS Catalina.
2022년 6월 기준 iOS 16 Beta
및 SwiftUI 4.0
, Xcode14 Beta
를 출시하였기 때문에 SwiftUI 3.0
에서는 더 이상 사용할 수 없는 기능과 새롭게 추가된 기능이 다수 생겼습니다.
Controls
- Alert
- ActionSheet
- Divider
- EditButton (toolbar, onDelete, onMove)
- Form (disabled / toggle / section)
- Gesture
- List (listStyle, toolbar, onDelete, onMove)
- Dynamic List using Identifiable
- Link
- LayoutPriority() - 레이아웃 우선 순위
- NavigationView / NavigationLink
- ScrollView
- Sheet / FullScreenCover (@Environment / presentationMode)
- Section
- Text
- TextField (textCase, hideKeyboard)
- TextEditor
Layout
- AspectRatio / GeometryReader / GeometryProxy
- HStack
- ZStack (Spacer, offset, zIndex)
- Shape(Circle, Rectangle, Capsule, RoundedRectangle) / Stack 조합
- Spacer / frame / minLength
- View LayOut (HStack / VStack / ZStack)
- OutlineGroup
- ScrollViewReader
Picker Controls
- Picker
- DataPicker
- ColorPicker
Others
- Color / Gradient (Linear, Angular, Radial) - fill / strokeBorder
- ForEach
- Path
- Image
- Label
- Menu
- Mask
- Overlay / background / Alignment
- OnAppear()
- PreView
- Treads ( background Treads / Queue )
- Sheet / FullScreenCover / Transition / Animation 비교
Passing the Data
- @State, @ObservedObject / Struct를 Class로
- @State & Binding : 클릭시 배경화면 변경
- @State & Binding : 간단한 날씨앱 및 다크모드 라이트모드
- @Binding #1
- @Binding #2
- @Binding #3
- @EnvironmentObject - 뷰간에 데이터 공유
- @FetchRequest 속성 래퍼 [ core Data ]
- @Namespace / matchedGeometryEffect() 애니메이션 동기화
- @ObservedObject #1
- @ObservedObject #2
- UserDefault
- @StateObject
Widget
Project