Swift UI - 소개

Beaver's Knowledge Storage·2023년 1월 11일
0

스윗한 SwiftUI

목록 보기
1/4
post-thumbnail

주요 특성

  • 선언형 프로그래밍 방식 도입으로 인해 UIKit 개발 방식과 비교해 코드가 매우 줄어듬.
  • 코드 수정 시 캔버스 영역 안에서 프리뷰를 통해 확인 가능.
  • 애플 플랫폼에서 동일한 프레임워크와 코드로 개발하고 다른 운영체제(macOS, watchOS)를 위한 앱으로 쉽게 이식 가능.

4가지 원칙

Swift UI는 4가지의 핵심 원칙을 기반으로 설계되었다.

1. 선언형

2. 자동화

매번 직접 작성해야 했던 상용구를 생략할 수 있어서 코드의 양을 줄이는 동시에 생산성을 높일 수 있게 되었다.

  • 오토레이아웃 코드들이 제거됨.
  • 애니메이션이나 화면 전환과 관련된 기능들 역시 자동화로 인해 매우 단순한 코드만으로 원하는 동작을 수행 할 수 있음.

3. 조합

SwiftUI의 API는 뷰의 조합과 분리를 간한히 할 수 있게 제공해 개발을 빠르게 할 수 있게 설계되었다.

  • 복잡한 뷰를 설계하고 수정하거나 특정 뷰를 재사용 가능.
  • 뷰 프로토콜을 준수하는 모든 객체에 공통적인 UI나 기능을 적용 가능.

4. 일관성

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

  • 기존에는 수동으로 동기화 작업을 해서 의도치 않은 버그가 발생하기 쉬움.
  • SwiftUI에서는 State, ObservableObject 등 프레임워크가 제공하는 API를 통해 자동으로 동기화를 하여 일관성 있는 결과와 버그 발생 확률을 줄임.

뷰 프로토콜

UIKit에서 SwiftUI로 변경되면서 뷰를 표현할 타입이 class에서 struct로 변경되었고, 반환 타입도 UIView에서 View로 변경되었다.

protocol View {
	associatedtype Body: View
    var body: Self.Body { get }
}
  • View 타입은 UIView와 달리 protocol로 선언 되어있음.
  • UIView는 UIKit에서 상속받은 많은 프로퍼티들을 사용할 수 있지만, 불필요한 프로퍼티들도 보유해야하는 단점도 있음.
  • View는 필요한 속성만 가지도록 구현되어 있어 UIView보다 경량화 되었음.
  • body에서 return 타입이 View이여서 무한 재귀호출이 발생하는데, Text, Image, Color 등등의 View에서 Never 타입을 사용해 재귀 호출을 끝냄.
extension Text: View {
	typealias Body = Never
}

UIHostingController

class UIHostingController<Content>: UIViewController where Content: View
  • UIHostingController는 UIViewController를 상속받고, 뷰 프로토콜을 준수하는 Content를 전달받는 클래스.
  • SwiftUI로 만들어진 View를 UIKit 환경에서 사용해야 할 때 해당 클래스를 사용.
let contentView = ContentView()
window.rootViewController = UIHostingController(rootView: contentView)

0개의 댓글