[SwiftUI] @State, @Binding

호랭이·2022년 8월 24일
0

🍎 SwiftUI

목록 보기
3/6

@state

  • SwiftUI에서 관리하는 값을 읽고 쓸 수 있는 property wrapper 유형이다.
  • UIKit과 다르게 SwiftUI에서는 property wrapper를 이용해서 값의 변화를 관찰하고 뷰에 반영해준다.
  • SwiftUI는 State로 선언된 프로퍼티들의 저장소를 관리한다.
  • State 값이 변경되면 뷰를 업데이트하기 때문에 항상 최신 값을 가진다.
  • State 속성으로 초기값을 지정했다면, 다른 값으로 재할당은 불가능하다. Binding을 통해서만 변경이 가능하다.

@Binding

  • State 속성을 자식 뷰에 전달하면 부모 뷰에서 값이 변경될 때마다 자식 뷰의 값을 업데이트하지만, 자식은 값을 수정할 수는 없다. 자식 뷰에서 값을 수정할 수 있도록 하기 위해 Binding을 사용한다.
  • @State 속성으로 선언된 프로퍼티가 속한 뷰 이외의 뷰가 이 프로퍼티를 사용한다면 @Binding 속성을 사용한다.

공식문서에서는

뷰를 인스턴스화하는 지점에서 뷰의 State 프로퍼티를 초기화하지 말라고 한다. SwiftUI가 제공하는 스토리지 관리와 충돌할 수 있기 때문...!
이를 방지하기 위해서 @State 프로퍼티를 뷰의 최상단 계층에서 private으로 선언하고, @Binding을 이용해서 하위 뷰들과 상태를 공유하는 것이 바람직하다고 말한다.
이런 방법을 사용하면 모든 스레드에서 State 프로퍼티를 안전하게 변경할 수 있다.

profile
삐약

0개의 댓글