데이터의 출처에 값을 읽고 쓸 수 있는 프로퍼티 래퍼 타입이다
Overview
binding은 저장하는 데이터와 데이터를 바꾸고 바뀐 값을 띄우는 view와 함께 연결시키는 양방향 연결을 만들어준다.
binding은 데이터를 직접 저장하는 대신 프로퍼티를 데이터 출처(어디에 저장되어 있든 상관없음)와 연결시켜준다. 예를 들어 play 버튼과 pause 버튼을 만들때 binding을 만들어 부모 뷰에 있는 프로퍼티와 연결시킬 수 있다.
struct PlayButton: View {
@Binding var isPlaying: Bool
var body: some View {
Button(isPlaying ? "Pause" : "Play") {
isPlaying.toggle()
}
}
}
부모 뷰는 재생 상태(데이터의 출처)를 저장하는 프로퍼티인 @State 프로퍼티 래퍼 선언한다.
- @Binding var isPlaying하고 연결된 프로퍼티 래퍼
struct PlayerView: View {
var episode: Episode
@State private var isPlaying: Bool = false
var body: some View {
VStack {
Text(episode.title)
.foregroundStyle(isPlaying ? .primary : .secondary)
PlayButton(isPlaying: $isPlaying) // Pass a binding.
}
}
}
PlayerView가 PlayButton을 초기화했을 때 @State 프로퍼티의 binding을 PlayButton에 binding 프로퍼티에 넘긴다. (@State 프로퍼티인 isPlaying 프로퍼티 래퍼를 PlayButton에 @Binding 프로퍼티인 isPlaying에 넘김)
프로퍼티 래핑 값에 $ 접두사를 적용하면 projectedValue가 반환되며, 이는 주 프로퍼티 래퍼의 경우 값에 대한 바인딩을 반환합니다.
- projectedValue: state 값과 바인딩된 값
- 프로퍼티 래퍼 내부에서 다른 값을 정의하여 사용하는 쪽에서 $ 키워드로 해당 프로퍼티 래퍼 값에 접근할 수 있게 해주는 기능
유저가 PlayButton을 터치하게 되면 PlayerView는 isPlaying의 상태를 업데이트하게 된다.
'SwiftUI' 카테고리의 다른 글
List (0) | 2023.10.30 |
---|---|
Navigation Stack (0) | 2023.10.26 |
Computed Properties (0) | 2023.10.26 |
KeyPath, 키 경로 (0) | 2023.10.25 |
projectedValue (0) | 2023.10.25 |