我正在學習SwiftUImacOS 開發,我想知道在創建管理器、服務等時正確的方法是什么。這些是與 UI 無關的物件——嚴格來說是業務邏輯的東西,甚至不是ViewModels. 我不應該在這類課程中使用諸如ObservableObject, Published,AppStorage等之類的東西嗎?一方面,添加它似乎是有益的,這樣我以后就可以輕松地將它們與, 一起使用ViewModels,并直接系結到某些屬性。另一方面,這似乎是錯誤的——就像這些屬性包裝器是嚴格SwiftUI相關的。那么我是否應該放棄管理器、服務和其他業務邏輯物件中的這些東西呢?
uj5u.com熱心網友回復:
ObservableObject和都是Published在 Combine 中定義的,所以它們可以在應用程式的 UI 層之外使用。相反,@AppStorage是在 SwiftUI 中定義的,所以你應該只在Views.
但是,在 Combine 中定義某些內容并不一定意味著它在未系結到您的 UI 時提供了有意義的使用價值。
ObservableObject的主要用例是將物件存盤為@ObservedObjectaView并獲取自動視圖更新。即使您可以使用從視圖外部提供的objectWillChange Publisher,ObservableObject它也沒有太多用處,所以一般來說,我不建議讓物件符合,ObservableObject除非它們直接更新您的 SwiftUI 視圖。
@Published另一方面,即使在 ViewModel-View 互動之外也能提供重要的價值。即使在純業務邏輯層中,觀察可變狀態的變化也非常有用,例如在位置管理器類中公開用戶的當前位置并從視圖模型中觀察它。標記此屬性@Published使其更易于觀察。
View 應該直接訪問哪些物件的分離是一個主觀主題,所以我不會詳細討論,但是如果你想讓你的 View 獨立于你的業務邏輯物件而不是 ViewModel,你應該存盤管理器、服務等在您的 ViewModel 上,并代理任何需要通過 ViewModel 更新 UI 的屬性。為此,您不需要讓您的經理/服務符合ObservableObject,但是,存盤可變狀態@Published可能會很有幫助。
uj5u.com熱心網友回復:
ObservableObject允許您將狀態存盤在獨立于任何視圖的物件中。當您使您的班級符合時,ObservableObject視圖可以觀察它(或聽)。要將變數的值廣播(發布@Published)到視圖,只需使用屬性 wrapper 標記它們。顯然,你知道這一點。我認為此模式嚴格專用于物件-> 視圖通信。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/534966.html
標籤:迅速苹果系统迅捷
