한번 예를 들어볼께요🙋🏻
우리가 SwiftUI로 어떤 화면을 구현하려 합니다.
PlayView라는 상위뷰가 존재하고 이 내부에는 플레이의 on/off 값을 가진 @State 변수로 isPlaying이 존재합니다.
자 그다음으로 PlayButtonView이라는 하위뷰가 존재하고 이 내부에는 isPlaying과 마찬가지로 @Binding 변수로 isPlaying가 존재한다고 가정해볼께요.
그랬을때 우리는 PlayView 내부에 PlayButtonView를 호출할때 @Binding 변수인 isPlaying에 @State 변수인 isPlaying을 넣어주려합니다.
이때 @State는 바인딩 타입이 아님으로 그냥은 넣어줄 수 없고 $를 붙여서 넣어주게 되는데요😲
여기서 $를 왜 붙이게 되었을까요?
그 이유는 PropertyWrapper에 구현된 projectedValue라는 인스턴스 프로퍼티 때문입니다!
SwiftUI에서 이 projectedValue는 Binding<Value>로 감싸져 있는 get 프로퍼티입니다.
해당 프로퍼티를 사용할때는 $를 붙여주도록 되어 있죠.
왜냐하면 PropertyWrapper를 만들때 wrappedValue를 구현해야하는데 이와 헷갈리지 않아야 되기 때문이라고 생각해요🙋🏻
$를 왜 붙여주는지 근간을 탐구해봤습니다🏃🏻