Skip to content

[동주] Demystify SwiftUI

윤동주 / Xerath edited this page Jul 18, 2024 · 1 revision

SwiftUI의 동작

SwiftUI는 코드를 볼 때 무엇을 보나?

  1. ID(Identity) -> 앱의 여러 업데이트에서 요소를 동일하거나 별개로 인식하는 방법
  2. 수명(Lifetime) → SwiftUI가 시간이 지남에 따라 View, Data의 존재를 추적하는 방법
  3. 종속성(Dependencies) → SwiftUI가 인터페이스를 업데이트해야 하는 시기와 이유를 이해하는 방법

Identity

  • 동일한 ID를 공유하는 View는 동일한 UI 요소의 State를 반영함.
  • 별개의 View는 서로 다른 ID를 가지고 서로 다른 State의 주기를 가지게 됨.

Explicit Identity - 맞춤형 / 데이터 기반 식별자를 사용

  • 명시적인 ID를 활용
  • 명시적 ID를 통해 View의 ID를 데이터에 연결하거나 특정 View를 참조하는 사용자 정의 식별자를 제공할 수 있음.
  • ex) ForEach문에서의 id 명시
  • Identifiable 프로토콜의 목적은 SwiftUI가 수명동안 데이터를 추적할 수 있도록 유형이 안정적인 ID 개념을 제공하도록 허용하는 것.

Structural Identity - View 계층 구조에서의 유형과 위치에 따라 View를 구별

  • View 프로토콜은 속성의 논리 문에서 단일 Generic View를 구성하는 ViewBuilder의 logic Statements를 암시적으로 래핑함.
  • SwiftUI는 if문으로 2개의 View를 만들기보단, modifier를 통해 하나의 View를 만들어서 사용하는 것을 권장함. == ex) Dependent Code로 작성

View Value와 View Identity는 다르다.

  • View의 생명주기는 ID의 지속 기간임.

State 생명주기와 View의 생명주기는 다르다.

Inert Modifier(불활성 수정자) → cheap, little inherent cost

  • Inert Modifier를 사용하는 것이 유리함.(if/else문보다 낫다는 의미인 듯)
Clone this wiki locally