Hacking with Swift 사이트의 강좌 번역본입니다.
[원문 : https://www.hackingwithswift.com/quick-start/swiftui/what-is-the-published-property-wrapper]
What is the @Published property wrapper?
@Published는 SwiftUI에서 가장 유용한 property wrappers중 하나이고, 변경이 발생하면 자동으로 알려주는 observable 객체들을 만들 수 있습니다. SwiftUI는 변경사항을 자동으로 관찰하고, 해당 데이터에 의존하는 뷰의 body property를 다시 호출합니다. 실제적으로, 이는 @Published로 표시된 property를 가진 객체가 변경될때마다, 해당 객체를 사용하는 모든 뷰는 이런 변경사항을 반영하기 위해서 다시 로딩될 것입니다.
예를들어, 다음과 같이 observable 객체가 있는 경우:
class Bag: ObservableObject {
var items = [String]()
}
@ObservableObject 프로토콜을 준수하는 것은 SwiftUI의 뷰들이 변경사항에 대해 관찰할 수 있다는 의미입니다. 하지만 유일한 property가 @Published로 표시되지 않았기 때문에, 변경사항 알림이 전송되지 않을 것입니다 - 배열에 항목들을 자유롭게 추가할 수 있고 뷰들은 업데이트 하지않습니다.
items에 무언가 추가되거나 제거될때마다 변경사항 알림을 보내고자하는 경우, 다음과 같이 @Published로 표시합니다.
class Bag: ObservableObject {
@Published var items = [String]()
}
다른것을 할 필요가 없습니다 - @Published property wrapper는 실제로 items에 willSet property observer를 추가하므로, 모든 변경사항은 자동으로 관찰자(observers)에게 전송합니다.
보다시피, @Published는 옵트인 방식(opt-in: 수신자의 허락을 받은 경우에만 발송)입니다 - 기본적으로 변경사항으로 다시 로딩하지 않기 때문에, 알려야하는 properties 목록이 필요합니다. 이것은 캐쉬(caches)를 저장하는 properties, 내부에서 사용되는 properties 등을 가질수 있다는 것을 의미하고, @Published로 특별히 표시하지 않는한 SwiftUI가 변경사항이 있을때 뷰를 다시 로딩하도록 강요하지 않습니다.
'SwiftUI > Appendix A' 카테고리의 다른 글
What is the @FetchRequest property wrapper? (0) | 2019.11.22 |
---|---|
What is the @GestureState property wrapper? (0) | 2019.11.22 |
What is the @Binding property wrapper? (0) | 2019.11.22 |
What is the @Environment property wrapper? (0) | 2019.11.22 |
What is the @EnvironmentObject property wrapper? (0) | 2019.11.22 |
What is the @ObservedObject property wrapper? (0) | 2019.11.21 |
What is the @State property wrapper? (0) | 2019.11.21 |
Understanding property wrappers in Swift and SwiftUI (0) | 2019.11.21 |