SwiftUI 資料狀態和繫結

2021-10-16 03:35:13 字數 1976 閱讀 4801

方案

說明備註

@state&@binding提供 view 內部的狀態儲存

應該是被標記為 private 的簡單值型別,僅在內部使用。

observableobject&@observedobject針對跨越 view 層級的狀態共享

處理更複雜的資料型別,在資料變化時觸發介面重新整理。

@environmentobject對於 「跳躍式」 跨越多個 view 層級的狀態

更方便地使用 observableobject,以簡化**。

parent view:

struct

parentview

:view

}}

child view:

struct

childview

:view

}}

執行效果:

注意,@published是個 internal 的。在 xcode 工程裡沒事,但在 playground 的 sources 裡寫是必須 public 的,這時可以採用下面這種手動處理的方法:

import

combine

public

class

model

:observableobject

}public

init()

}

parent view:

public

struct

parentview

:view

}public

init()

}

child view:

public

struct

childview

:view

}public

init

(model:

model

)}

這裡其實是利用 class 的「傳引用」特性來讓子訪問到父的 model 的,沒什麼特殊的。

沿用上面observableobject的 model:

class

model

:observableobject

parent view:

public

struct

parentview

:view

}public

init()

}

child view:

public

struct

childview

:view

}public

init()

}

呼叫 parent 的 view:

parentview()

.environmentobject

(model()

)

用 environmentobject 讓所有子都訪問到父的 model,可以避免逐層手動傳遞物件。

完整原始碼實現:swiftuidatastateandbinding.playground。

王巍 (@onevcat)《swiftui 與 combine 程式設計》chapter 3:資料狀態和繫結

狀態和資料流 SwiftUI 中文文件手冊)

控制和響應應用程式模型中的資料流和更改。swiftui為使用者介面設計提供了一種宣告式方法。組成檢視層次結構時,還需要指示檢視的資料依賴性。當資料由於外部事件或使用者採取的措施而更改時,swiftui會自動更新介面的受影響部分。結果,該框架自動執行了檢視控制器傳統上完成的大部分工作。該框架提供了一些...

Swift UI專項訓練7 資料新增

上一話我們使用了自己定義的控制器之後發現tableview上的餐館沒有了,這一話我們來新增資料,新新增乙個餐館類,這個類我們不需要繼承系統的類,直接新增乙個swift檔案就好 我簡單建乙個類,分別代表餐館名字 餐館位置和餐館評分,它們都有預設值。然後我們回到餐館排行的控制器中新建乙個餐館的陣列。va...

vue 單向資料繫結 雙向資料繫結和單向資料流

用過vue開發的同學都知道,vue.js 最顯著的特點就是響應式和資料驅動,也就是將model和view進行單向繫結或者雙向繫結。我最近才深入了解到有單向繫結,自己平時用,但是不了解其中緣由 vue支援雙向資料繫結和單向資料繫結 1.插值形式 hello,you are years old expo...