이번에는 SwiftUI의 @State에 대해 알아보려 합니다.
일단은 SwiftUI가 어떤 식의 개발을 장려하는지부터 알아봅시다.
Data Driven(데이터 주도)
SwiftUI는 Data Driven, 데이터 주도적입니다.
데이터 주도란 앱 데이터(Data)와 앱의 사용자 인터페이스(UI) 및 로직 사이의 관계에서 본 것인데,
말 그대로 특정 변수가 UI에 영향을 주는 경우에 데이터가 변함에 따라 UI에 표현되는 내용이 달라지는 것을 말하는 것이죠.
@State
앞서 말했듯 SwiftUI는 데이터 주도적 개발을 위해 몇가지 장치를 갖고 있는데요,
@State는 데이터 주도적인 개발을 위한 프로퍼티 래퍼입니다.
얘는 프로퍼티에 붙여서 뷰의 현 상황을 저장하려고 할 때 사용합니다.
프로퍼티와 뷰를 묶었다고 할수있죠. 이걸 Binding(바인딩)이라 합니다.
그럼 변수가 바뀐다 -> 뷰가 바뀐다 가 성립하니까 해당 프로퍼티가 변경되면 이를 참조하는 뷰는 최신값이 반영되도록 업데이트되겠죠?
또한 상태가 매번 바뀔 수 있으니까 변수로 선언해야 됩니다.
그리고 뷰의 상황을 저장한다는 건 그 뷰에 속해있단 얘기라 다른 데서 함부로 건드리면 안 되겠죠?
그래서 private으로 선언해야 합니다.
Swift docs의 State 에 가보면 처음부터 나와있죠.
Use state as the single source of truth for a given value type that you store in a view hierarchy.
뷰계층에 주어진 값타입을 저장할때 단일 출처의 신뢰를 위해 사용한다.
뜻을 설명해보자면 값이 신뢰도가 있어야 한단 얘기죠?
그래서 private을 써서 해당 뷰에서만 쓸수 있게, 외부에선 접근하지 못하게 막아야 한다는 겁니다.
선언은 변수를 저장할 때 맨 앞에 @State를 붙이면 됩니다. 불러올 땐 변수명 앞에 $를 붙이면 됩니다.
// 선언
@State private var name: String = "김철수"
// 호출
Text("\($name)")
아래는 예시입니다.
Toggle이 알아서 값을 처리해 주기 때문에 따로. toggle() 메서드는 들어가지 않습니다.
그래도 정상적으로 값이 처리되어 바뀌죠? 이런 식으로 간단하게 현재 상태를 저장하고 반영해 줄 때 사용합니다.
'공부 > Apple' 카테고리의 다른 글
[스위프트] Some (1) | 2024.02.09 |
---|---|
[스위프트] SwiftUI - @Binding (0) | 2024.02.08 |
[스위프트] SwiftUI - AsyncImage (0) | 2024.02.05 |
[스위프트] Deep Link (0) | 2024.02.03 |
[스위프트] UIKit 스크린 사이즈 구하는 우회 방법 (0) | 2024.02.01 |