SwiftUI) @State와 @Binding

JeongYeongJoon·2023년 6월 4일

iOS_Interview

목록 보기
12/15
post-thumbnail

SwiftUI에서 지원하는 다양한 Property Wrapper 중 @State@Binding 에 대해 알아보자.

@State

  • 변화가 생기면 해당 변수의 값을 읽거나 새로 쓸 수 있음을 의미하는 property wrapper
  • SwiftUI 는 State 로 선언된 property 들의 저장소를 관리
  • State value 가 변경되면 뷰는 해당 value 의 appearance 를 무효화 하고 다시 body 값을 계산
  • @State 변수값이 변경되면 view 를 다시 랜더링 하기 때문에 항상 최신 값을 가짐
  • @State 인스턴스는 그 자체로 값이 아닌, 값을 읽고 쓰는 것을 의미함
  • @State를 자식 뷰에 전달하면 부모에서 값이 변경될 때마다 자식을 업데이트
  • 단, 자식 뷰에서 값을 수정하려면, 부모에서 자식으로 Binidng을 전달하여 자식 뷰에서 값을 수정이 가능
  • @State 프로퍼티는 항상 private으로 선언하고 가장 상위 뷰에서 @State를 관리할 것
  • 뷰를 초기화할때, @State 프로퍼티 값도 같이 초기화하게되면 SwiftUI에서 @State 프로퍼티를 관리하는 공간인 Storage에서 conflict가 나기 때문
  • 만약 상위 뷰에서의 State값을 하위 뷰에서도 접근할 수 있게하려면 Binding을 하위 뷰에 넘겨주거나 상위 뷰에서 read-only property로 설정하여 값을 공유

@Binding

  • 신뢰적으로 값을 읽고 쓸수 있는 property wrapper 타입
  • "바인딩"의 의미: 자식 뷰의 특정 property 값이 변경되면 부모의 특정 property 값도 변경 (+양방향)
  • 바인딩을 통해 데이터를 표시하고 변경하는 뷰 간에 양방향 연결을 만드는 것
  • 사용시에는 앞에 $를 사용해 Bining 변수임을 나타냄. @State 로 선언된 속성에 변경이 생기면 @Binding 변수에서 이를 인지하고 해당 값에 따른 뷰 변화를 바로 반영할 수 있도록 하는 방식
  • 외부에서 접근해야 하기 때문에 private 으로 선언하지 않음

참고 사이트

[iOS] SwiftUI - @State, @Binding
[iOS - SwiftUI] State, Binding 개념, 사용 방법

profile
iOS와 Swift, SwiftUI를 공부하기 위해 블로그를 운영 중입니다.

0개의 댓글