일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 푸시 데이터 저장
- Swift flutterviewcontroller
- 노티피케이션 익스텐션
- native flutter view
- 안드로이드 숏컷
- 스위프트 앨범
- 안드로이드 FCM
- Flutter NativeView
- 스위프트 UserDefaults
- 안드로이드 바로가기
- swift 문자
- silent push
- FlutterView MethodChannel
- Flutter UIKitView MethodChannel
- 안드로이드 에러
- flutter rotate
- 안드로이드 앨범
- 스위프트 웹뷰
- 스위프트 푸시
- 앱 백그라운드 푸시 데이터 저장
- NotificationService Extension
- Swift flutterview
- 플러터 뷰 컨트롤러
- 스위프트 테이블 뷰 셀
- 스위프트 카메라
- 앱 꺼졌을 때 푸시 데이터 저장
- swift autolayout
- flutter 회전
- 스위프트
- swift sms
- Today
- Total
Things take time
[SWIFT] iOS13 - Swift UI란 무엇인가(UIKit은 ??) 본문
iOS13이 공개되면서 UI적인 변화가 있어 정리하려고 한다.
기능적인 부분만 정리하는게 아니라, 문서를 보면서 내용을 정리하는 것이다!
https://www.hackingwithswift.com/articles/193/whats-new-in-ios-13
0. Tutorial
https://www.hackingwithswift.com/articles/196/learn-swiftui-with-free-tutorials
여러 스위프트 UI의 튜토리얼 블로그 등을 모아둔 사이트!
1. SWIFT UI의 등장
Xcode 11버전에선 이른바 SWIFT UI란 이름으로 새로운 방식의 디자인 인터페이스를 제공한다. 애플은 오랫동안 스토리보드 혹은 프로그래밍적으로 짤 수 있는 UI 방법 두 가지를 제공했다. SWIFT UI는 이 방식을 탈피하여, 나눠지는(쪼개지는) 화면 경험을 제공한다.
- 어떻게 레이아웃이 보이고 작동하는지에 대한 새로운 UI
- 실시간으로 Swift 코드 작성시 UI 미리보기를 제공함
- UI 변수 연결인 outlets나 action과 같은 애들을 컴파일 할때 체크하여 런타임때 UI Fail의 위험을 감소시킴
- 자바의 스윙, React Native와 같은 멀티 플랫폼 프레임워크
- 다만 스윙, React와 차이점은 하나의 코드가 모든 플랫폼에서 공통된 의미로 작동한다는 멀티 플랫폼(스윙, 리액트)의 의미가 아니라 애플의 플랫폼(Mac, Watch, ...)에서 가져다 쓸수 있다는 프레임 워크란 의미
- 속도가 매우 빠름(스토리보드 켜놓고, 소스 켜놓고 하는 기존 작업들에 비해)
https://www.hackingwithswift.com/quick-start/swiftui
2. SWIFT UI vs Interface Builder and storyboard, 써야하는 이유
기존 스위프트 개발자라면 UI를 만들때 스토리보드내에서 뷰 컨트롤러를 넣고, 테이블 뷰를 넣고 ,테이블 뷰 셀을 넣고 이 파일들을 각각의 swift 파일에 연결하며, 각각의 UI를 컨트롤 버튼을 누른채 드래그하여 만들었을 것이다.
혹은 viewDidLoad등에서 UI를 프로그래밍적인 코드로 작성해서 생성했을 것이다.
SWIFT UI는 이 방법을 탈피하며, 이 두가지의 방법을 동시에 지원한다.
3. UIKit -> SwiftUI
Swift UI는 말 그대로 UI관련 프레임워크다. 그러므로 기존에 사용하고있던, 각각의 뷰 컨트롤러 클래스에 거의 들어가있던
import UIKit
이 부분을
import SwiftUI
로 바뀐다는 것을 의미한다. 그러므로 SwiftUI를 Import하게 될 경우 UI가 앞에 붙었던 애들이 다 탈락하고 새롭게 변한다.
UITableView: List
UICollectionView: No SwiftUI equivalent
UILabel: Text
UITextField: TextField
UITextField with isSecureTextEntry set to true: SecureField
UITextView: No SwiftUI equivalent
UISwitch: Toggle
UISlider: Slider
UIButton: Button
UINavigationController: NavigationView
UIAlertController with style .alert: Alert
UIAlertController with style .actionSheet: ActionSheet
UIStackView with horizontal axis: HStack
UIStackView with vertical axis: VStack
UIImageView: Image
UISegmentedControl: SegmentedControl
UIStepper: Stepper
UIDatePicker: DatePicker
NSAttributedString: Incompatible with SwiftUI; use Text instead.
이런식으로 변경된다고 한다. 이 외에도 스택뷰라던지, 다른 컴포넌트들도 변경된다고 한다. (위가 다가 아니란 의미)
4. SWIFT UI는 UIKit을 대체하는가?
실제 Swift UI는 UIKit의 위에서 빌드된다. 무슨의미냐면, Swift UI로 작성된 코드는 내부에서 UIKit에 있는 컴포넌트 소스로 변환해서 컴파일한다는 의미이다. 그러므로 개발자가 신경쓸 의미는 아니고, 애플쪽에서 UIKit을 대체하도록 할 것이다.
5. 그렇다면 Swift UI만을 공부해야하는가?
애플의 플랫폼에서는 미래에는 Swift UI를 밀어 붙일 것이므로 UIKit의 사용을 없앨 수 있다고 한다. 그러나, 현재 공개된 시점에서는 Swift UI만을 한다고 모든 것에 대응할 수는 없으므로 둘 다 할 줄 알아야한다고 한다.
5-1. 제한된 API 영역
- UICollectionView의 경우엔 현재 SwiftUI에서 대응되는 것이 없다. 그러므로 나는 컬렉션뷰를 써야한다면 UIKit의 UICollectionView를 써야한다.
5-2. 제한된 SDK
- iOS13 이상부터 지원하는 Swift UI이므로 그 아래 버전의 UIKit을통해 작성된 앱들을 무시할 수 없다. 물론 이후에는 iOS13이상일 경우 Swift UI로 작성을해야하지만, 바로 적용시킬 수는 없다.(시간이 소요될 것이다)
5-3. 제한된 지원
- UIKit은 십년이 넘는 기간동안 지원되왔기에, 여러 예외사항 문제들을 해결해온 노하우가 있으며, 그에 해당하는 많은 라이브러리들이 분포되어있다. 그러므로 이제 막 공개된 Swift UI에 나타날 수 있는 문제, 이를 활용한 라이브러리가 보급되기엔 당장에 무리가 있다.
그러나 미래를 봤을 때, UIKit의 미사용은 예견된 일이므로(위의 문제들은 해결될 것) Swift UI는 반드시 학습해야하는 영역이란 의미이다. 그러나 지금 당장 바로는 아니다!
6. AutoLayout같은 애들은 어떻게?
오토레이아웃과 같은 UI, 즉 화면이 어떤 크기를 가지더라도 버튼이 정 중앙에 위치하는 등의 이런 작업들은 Swift UI에서 어떻게 사용되는가, Flexible box layout system이란 것이 도입되어 웹을 하다가 온 개발자에게 친숙할 것이다.
추가로 조사해보니, H/VStack, Groups라는 개념이 되어, 오토레이아웃이 아니라 새로운 방식으로 코드작성을 통해 오토레이아웃을 대체할 것으로 보인다. 이를 통해 재 사용되는 뷰 들 등에 대해 효과적으로 대응할 수 있다.
7. 동시에 사용 가능?
SwiftUI와 UIKit을 같이 쓰고 싶다면, UIHostingController를 사용하여 할 수 있다고 한다.
8. 추가
위 내용들은 영어 사이트에서 찾아 정리한 내용이고, 좀더 보기 편하고 직관적으로 요약된 것을 보고싶다면 아래 포스팅도 좋은듯!
https://post.naver.com/viewer/postView.nhn?volumeNo=21490246&memberNo=6384148
'iOS (기능)' 카테고리의 다른 글
[Swift] Error : terminating with uncaught exception of type NSException[Xcode 11.2/iOS 13.2 미만 버전 앱 죽는 현상] (0) | 2019.11.07 |
---|---|
[SWIFT] iOS 13대응 - UI(Modal 뷰, Present, 다크모드, StatusBar Color) (4) | 2019.09.24 |
[SWIFT] 뷰 컨트롤러 종료시 좌우로 화면 종료하기(dissmiss) (0) | 2019.09.05 |
[SWIFT] 현재 날짜, 형식, 시간, 분 구하기 / 날짜 차이 구하기 (0) | 2019.06.12 |
[SWIFT] 테이블 뷰 에서 AutomaticDimension 사용시, 이미지뷰에 따른 높이 조절하기 (0) | 2019.04.08 |