2019년 애플의 WorldWide Developers Conference(WWDC)에서 처음 소개된 SwiftUI는 모든 애플 운영체제용 앱을 개발하는 데 있어서 완전히 새로운 방법을 제공하였다. SwiftUI의 기본적인 목적은 앱 개발을 더 쉽고 빠르게 함과 동시에 소프트웨어를 개발할 때 일반적으로 발생하는 버그들을 줄이는 것이다.
SwiftUI 도입 이전에는 iOS 소프트웨어 개발 키트를 구성하는 여러 프레임워크와 함께 UIKit을 이용하여 iOS앱을 만들었다. 앱 화면을 구성하는 사용자 인터페이스 레이아웃을 설계할 수 있도록 Xcode에는 인터페이스 빌더라는 도구가 포함되어 있다. 인터페이스 빌더는 앱을 구성하는 각각의 화면을 담은 스토리보드를 생성할 수 있게 해준다.
UIKit과 인터페이스 빌더를 사용하여 사용자 인터페이스 레이아웃을 설계하고 필요한 동작을 구현하는 것과는 완전히 다른 방법인 선언적 구문이 SwiftUI에 도입되었다.
SwiftUI는 기본적으로 레이아웃에 포함될 컴포넌트들을 선언하고, 그것들이 포함될 레이아웃 매니저 종류를 명시하고, 속성을 설정하기 위하여 수정자를 사용한다. 이렇게 선언하고 나면 레이아웃의 위치와 컨스트레인트 그리고 렌더링 방법에 대한 모든 복잡한 세부 사항은 SwiftUI가 자동으로 처리한다.
뷰 레이아웃이 선언되고 테스트되는 동안 Xcode에서 제공하는 프리뷰 캔버스를 통해 실시간으로 변경되는 레이아웃을 확인할 수 있다. 또한, Xcode는 라이브 프리뷰 모드를 가지고 있어서 시뮬레이터나 디바이스에 빌드하고 실행하지 않아도 프리뷰캔버스 내에서 앱을 실행하고 테스트할 수 있게 해준다.
SwiftUI는 앱의 데이터 모델과 사용자 인터페이스 컴포넌트, 그리고 기능을 제공한ㄴ 로직을 바인딩하는 여러 방법으로 복잡도를 해결한다.
데이터 주도로 구현하면 데이터 모델은 앱의 다른 부분에서 구독할 수 있는 데이터 변수를 게시하게 된다. 이러한 방법을 통해 데이터가 변경되었다는 사실을 모든 구독자에게 자동으로 알릴 수 있다. 만약 사용자 인터페이스 컴포넌트와 데이터 모델 간에 바인딩이 된다면, 추가적인 코드를 작성하지 않아도 모든 데이터의 변경 사항을 SwiftUI가 사용자 인터페이스에 자동으로 반영할 것이다.
SwiftUI 기반 코드를 포함하고 있는 앱은 오직 iOS 13 또는 그 이후 버전이 실행되는 디바이스에서만 동작한다. 이전 버전의 iOS를 사용하는 디바이스 타깃의 프로젝트가 아니라면 가능한 한 SwiftUI를 사용하는 게 좋다.
만약 기존에 UIKit으로 개발된 앱을 가지고 있으며 그 코드를 SwiftUI로 변환하는게 쉽지 않은 상황이라면 계속해서 UIKit을 사용하는게 났다. UIKit은 앱 개발 도구 중에 중요한 부분으로 계속해서 존재할 것이며, 가까운 미래에 애플이 확장하고 지원하며 향상시킬 것이다. 하지만 기존 프로젝트에 새로운 기능을 추가할 경우에는 SwiftUI를 이용하여 기존의 UIKit 코드에 통합하는게 좋다.