SwiftUI:系統(tǒng)提供的屬性包裝

  1. @State:用于在視圖內(nèi)部管理局部狀態(tài)。當(dāng)狀態(tài)值發(fā)生變化時,視圖會自動重新渲染。通常用于在一個視圖中持有簡單的、短期的狀態(tài)。更多
  2. @Binding:引用另一個視圖擁有的值類型數(shù)據(jù),用于在父子視圖之間傳遞狀態(tài)。父視圖持有狀態(tài),而子視圖使用綁定來修改該狀態(tài),在本地更改綁定也會更改遠(yuǎn)程數(shù)據(jù)。更多
  3. @ObservedObject:用于觀察遵循 ObservableObject 協(xié)議的對象。當(dāng)對象的某些屬性標(biāo)記為 @Published 并發(fā)生改變時,使用該對象的視圖將自動重新渲染。更多
  4. @StateObject:用于創(chuàng)建并持有 ObservableObject 對象,確保其生命周期與視圖相同。更多
  5. @EnvironmentObject:用于在多個視圖之間共享狀態(tài),讀取我們放入環(huán)境中的共享對象。與 @ObservedObject 類似,@EnvironmentObject 允許某個視圖樹中的所有子視圖訪問相同的對象,而無需顯式傳遞。更多
  6. @Published:用于將對象的屬性標(biāo)記為可以發(fā)布更改通知的。這意味著當(dāng)該屬性的值發(fā)生變化時,任何訂閱了這個屬性的觀察者都會收到通知。@Published 通常與遵循 ObservableObject 協(xié)議的對象一起使用。更多
  7. @Environment:用于訪問系統(tǒng)提供的環(huán)境值,例如顏色模式、字體設(shè)置等。系統(tǒng)會自動提供這些值,并根據(jù)需要進(jìn)行調(diào)整。更多
  8. @AppStorage:允許將數(shù)據(jù)直接存儲到 UserDefaults 中,從 UserDefaults 讀取和寫入值,并且該值的改變會自動刷新視圖。這對持久化數(shù)據(jù)非常有用。
  9. @SceneStorage:用于存儲與應(yīng)用程序場景相關(guān)的狀態(tài)數(shù)據(jù)。與 @AppStorage 類似,但主要用于應(yīng)用場景的恢復(fù)。
  10. @FocusState:用于管理視圖中的焦點狀態(tài),通常與表單和文本輸入相關(guān)聯(lián),用于管理和跟蹤鍵盤焦點的狀態(tài),以便在應(yīng)用中實現(xiàn)鍵盤導(dǎo)航。更多
  11. @GestureState:用于跟蹤和管理與手勢相關(guān)的狀態(tài)信息。更多
  12. @Namespace :創(chuàng)建一個動畫名稱空間,用于在多個視圖之間創(chuàng)建唯一的命名空間,通常與 MatchedGeometryEffect 結(jié)合使用,以實現(xiàn)自定義的動畫和過渡效果。更多
  13. @FetchRequest:用于從 Core Data 數(shù)據(jù)庫中提取數(shù)據(jù),為特定實體啟動核心數(shù)據(jù)獲取請求,并在視圖中自動更新這些數(shù)據(jù)。更多

最后

  • @StateObject@ObservedObject@EnvironmentObject 專用于關(guān)聯(lián)符合 ObservableObject 協(xié)議的實例。
  • 雖然在某些情形下 @StateObject 可以替代 @ObservedObject 并提供相似的功能,但它們各自有獨特的使用場景。@StateObject 通常用于創(chuàng)建和維護(hù)實例,而 @ObservedObject 用于引入和響應(yīng)已存在的實例。
  • 在 iOS 17+ 的環(huán)境中,如果應(yīng)用主要依賴于 ObservationSwiftData 框架,那么這三個屬性包裝器的使用頻率可能會相對較低。
  • @State@Environment 不限于只能存儲值類型,但也可用于其他類型。
  • @Environment 提供了一種相對更安全的方法來引入環(huán)境數(shù)據(jù),因為它可以通過 EnvironmentValue 提供默認(rèn)值。這減少了因遺漏數(shù)據(jù)注入而導(dǎo)致的應(yīng)用崩潰風(fēng)險。
  • Observation 框架的背景下,@State@Environment成為了最主要的屬性包裝器。無論是值類型還是 @Observable 實例,都可以通過這兩種包裝器引入視圖。
  • 自定義 Binding 提供了強(qiáng)大的靈活性,允許開發(fā)者在數(shù)據(jù)源和依賴于 Binding 的 UI 組件之間以簡潔的代碼實現(xiàn)復(fù)雜邏輯。

參考鏈接1
參考鏈接2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容