학습 내용
- 프로퍼티 래퍼
- @Binding, ObservableObject
사실 기억나는건 이게 다인데.. 근데 적어보니깐 엄청 몇개 없어 보이는데 엄청엄청 좋고 중요한 내용이었던거 같음!!!!
진짜 정확하지 않은 정보들이 넘쳐날 수 있으니깐 참고하고 태클해주세여
프로퍼티 래퍼(Property wrapper)
내가 이해한 프로퍼티 래퍼는 동일한 기능을 수행하는 연산 프로퍼티가 존재할 경우 효율성? 재사용성 뭐.. 그런거 등등을 위해서 프로퍼티 래퍼로 만들어서 쓸 수 있다고 이해해씀.
그러니깐 연산 프로퍼티를 -> 프로퍼티 래퍼로 변환해서 로직을 구현할 수 있다는 거임
프로퍼티 래퍼를 만들때는 @propertyWrapper 라는 키워드를 이용해서 클래스, 또는 구조체를 선언하고,
게터, 세터를 포함한 wrappedValue를 구현하여 그 안에 원하는 로직을 작성한다.
이후 앞에서 만든 wrappedValue를 초기화하여 사용하면되는데 다음 예제를 보자!
@propertyWrapper
struct FixCase {
private var value: String = ""
var wrappedValue: String {
get { value }
set { value = newValue.lowercased()}
}
init(wrappedValue initialValue: String) {
self.wrappedValue = initialValue
}
}
struct MyComputer {
@FixCase var kind: String
var dateOfPurchase: String
var price: Int
func displayComputer() {
print("종류: \(kind), 날짜: \(dateOfPurchase), 가격: \(price)")
}
}
var myMac: MyComputer = MyComputer(kind: "MacBook", dateOfPurchase: "2022-04-01", price: 100)
myMac.displayComputer()
그리고 여러 변수를 이용하거나, 다양한 타입을 지원하기 위해서 제네릭을 사용해서 프로퍼티 래퍼를 구현할 수도 있다.
@Binding, ObservableObject
@Binding
@State로 선언해서 뷰에서 값의 변화에 따라 뷰 업데이트가 되었었는데 이를 하위 뷰에서도 그 값을 접근하기 위해서는
@Binding 키워드를 사용할 수 있습니다!
ObservableObject
뷰에서 데이터 변화를 감지하고, 뷰를 업데이트 하기 위해서 채택할 프로토콜입니다.
프로토콜이긴 하지만 class가 받아서 사용할 수 있습니다.
동일한 뷰내에서는 @State나 @Binding을 사용할테지만, 지금 소개하는건 뷰 외부에서 접근해야 할 경우 사용합니다!!!
Observable 객체 내에서 변화될, 그러니까 상태가 감지되어야 할 변수에 @Published 프로퍼티를 이용해 게시를 합니다.
게시 후 사용할 뷰에서 @ObservedObject 프로퍼티 래퍼를 사용해서 업데이트 될 때마다 뷰를 갱신합니당
2023.06.26 - [iOS/SwiftUI] - SwiftUi DataBinding
SwiftUi DataBinding
이 게시글 내용은 공부하면서 점차 수정해 나갈 예정입니당 2023.6.26 13:31 작성 ----------- SwiftUI → 데이터 주도 방식으로 앱 개발을 강조 publlisher와 subscriber 구축 데이터와 UI 뷰 사이 데이터 변경에
ozdevelop.tistory.com