SwiftUI 이전에는 PlayerViewController가 PlayerView, PlayButton을 가지고 있고, 재생중이라는 정보(isPlaying)는 PlayerViewController와 PlayButton이 가지고 있어서 UIKit으로 개발을 했을 때 복잡한 구조로 될 수 있었다.
SwiftUI를 이용하면 위와 같이 간단하게 구현할 수 있다.
SwiftUI 이전에 데이터를 다루기 어려웠던 이유는, 상태관리를 위한 데이터가 여기저기에 있었다. 하나의 값이 아니고 복사한 값들이 여기저기에 있었기 때문에 시스템이 어떤 데이터가 진짜인지 모르게 되고, 상태관리가 어려웠다.
따라서 이러한 문제를 해결하기 위해 SwiftUI에서는 진짜 데이터가 무엇이고 하나의 데이터를 가지고 시스템이 상태관리하는 것을 중요하게 여긴다.
SwiftUI에서 @State
를 사용해서 Single Source of Truth를 나타내고, @Binding
을 사용해서 진짜 데이터를 참조할 수 있게 해줘서 Single Source of Truth에 접근할 수 있다. 또한, SwiftUI에는 View의 상태 정보를 저장하는 별도의 공간이 있다.
SwiftUI에서 시스템이 단방향이라는 것도 또한 중요하다. View가 사용자에게 보여지면 사용자의 Interaction을 통해서 상태를 바꿀 수 있다. 상태가 바뀜에 따라 View도 자동으로 바뀌게 된다. 바뀌어진 View가 Render가 되고 또 이 View를 보고 사용자가 Interaction을 하게 된다.