SwiftUI 도입

개요

SwiftUI의 역사, 사용법, 간단한 내용정도를 알아보겠다.

애플 공식문서




SwiftUI


SwiftUI는 2019년 애플에서 공개한 UI프레임워크이다.

우리는 기존의 UI프레임워크인 UIKit과 SwiftUI라는 두가지의 선택지가 생겼다.

SwiftUI는 iOS 13이후의 기기들만 지원한다. 그러한 기기들은 아이폰6부터인데 왠만한 사람들은 아이폰6이후의 버전을 가지고 있지 않을까 생각한다.

둘은 상호 배타적인 존재가 아니다. UIView와 SwiftUI를 함께 사용할 수 있다.

그러나 개발의 편리성과 효율성때문에 점점 추세는 SwiftUI가 될것이라 생각하여 SwiftUI를 택했다.




SwiftUI의 특징




선언형


SwiftUI는 명령형이 아닌 선언형 프로그래밍 방식이다.

김치볶음밥을 먹는다고 했을 때 명령형과 선언형의 차이를 알아보겠다

명령형

  • 부얶으로 간다
  • 김치를 찾는다
  • 김치를 썬다
  • 김치와 밥을 볶는다
  • 김치볶음밥을 먹는다

선언형

  • 김치볶음밥을 먹는다

명령형은 How에 집중하며 선언형은 What에 집중한다.

그렇기에 명령형 방식인 UIKit보다 SwiftUI의 코드가 훨씬 간결하다.



디자인 도구


코드 개발과 스토리보드 개발의 경계를 허물었다.



모든 애플 플랫폼 지원


기존에는 맥, 애플워치, 패드, 아이폰등 각각의 플랫폼마다 다른 코드로 작성했어야했지만 SwiftUI는 재활용이 가능하다.



자동화


가능한 많은 기능이 자동으로 수행될 수 있게 제공한다.



조합


SwiftUI의 API는 뷰의 조합과 분리를 간단히 할 수 있게 제공한다.



일관성


UI는 항상 데이터와 동기화되어 일관성 있게 보여야한다.




SwiftUI 프로젝트 파일


ContentView.swift

뷰 프로토콜을 준수하는 구조체를 사용해서 body프로퍼티에 UI를 구성하는 코드를 구현한다.

기존의 ViewController 역할을 한다. 대부분의 작업이 이 파일에서 수행된다.

기본 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("Hello, world!")
            .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        Group {
            ContentView()
                .previewInterfaceOrientation(.portrait)
        }
    }
}

ContentView 구조체

UI를 구성하는 메인문 같은 것

구조체는 상속을 받을 수 없다. ContentView 옆에 View는 프로토콜로 선언되어있다.

필수로 구현해 주어야 하는 것은 읽기 전용인 body 연산 프로퍼티이다.

View Protocol

1
2
3
4
protocol View {
    associatedtype Body: View
    var body: Self.Body { get }
}

3번째 줄을 보면 body 타입이 자기 자신 View이다. 즉 재귀호출이 일어난다.

그러나 실제 컨텐츠를 표현하는 기본 뷰나 컨테이너 뷰에는 Never타입을 사용하여 재귀호출이 일어나지 않는다.

ContentView_Previews 구조체

캔버스에 뿌려줄 프리뷰 구조체



AppDelegate.swift


모든 iOS 앱은 이벤트 처리와 사용자 인터페이스를 표시하기 위해 앱에 사용될 UIApplication 클래스의 인스턴스를 갖는다.

UIApplication 은 앱의 생명주기와 관련된 중요한 이벤트를 관리한다.

이 파일은 디폴트로 생성되며 AppDelegate 프로토콜을 따르는 메서드들만 포함하지만 앱 생명 주기와 관련된 메서드면 추가할 수 있다.



SceneDelegate.swift


현재 세션과 연결되는 새로운 화면 객체, back과 front 간의 화면 전환, 앱에서 연결이 끊긴 화면과 같은 이벤트를 처리하는 메서드를 포함한다.

이 파일에서 가장 중요한 델리게이트 메서드는 새로운 화면 객체가 앱에 추가될 때마다 호출되는 willConnectTo 메서드이다.

이 메서드는 ContentView.swift 파일에 선언된 ContentView 뷰의 인스턴스를 생성한다.

  1. ContentView 인스턴스 생성
  2. 새로운 UIWindow 객체 생성
  3. UIHostingController 인스턴스에 ContentView 객체 포함
  4. UIHostingController를 새롭게 생성된 UIWindow 객체의 최상위 뷰 컨트롤러로 할당
  5. 화면의 현재 UIWindow 인스턴스를 새로운 인스턴스로 치환
  6. 사용자에게 윈도우 표시