SwiiftUI的基礎(chǔ)使用我們在《SwiftUI實戰(zhàn)之用Picker做個優(yōu)雅的菜單》中進行了詳細介紹食铐,閱讀過這篇文章的朋友畴椰,肯定應(yīng)該掌握了Picker的基礎(chǔ)用法
本文價值與收獲
看完本文后抠蚣,您將能夠作出下面的界面
但是問題來了酷窥,我們該如何響應(yīng)Picker的Callback贫橙?
提出這個問題捍歪,則證明您一定是個iOS老鳥矾踱,有一定的項目經(jīng)驗恨狈。不過我要給您個建議了,在SwiftUI我們就要用SwiftUI的思路去思考問題呛讲。
在SwiftUI世界里禾怠,一切都是數(shù)據(jù)驅(qū)動的。我們要順應(yīng)SwiftUI機制贝搁,而不是去破壞他吗氏。
不過,上面但需求肯定也是真實存在的雷逆。我們該如何解決呢弦讽?
解決方案
在編程世界,我們遇到90%的問題通常都是對API不熟悉造成的膀哲。大白話就是書讀的太少往产。
下面我們再復(fù)習(xí)一下《SwiftUI 基礎(chǔ)之@State @Binding @ObservedObject @EnvironmentObject區(qū)別》中對他們的介紹:
@State和@ObservableObject之間有一些細微的差異被碗。這些都是很重要的,因為它們都有不同的用途仿村。首先蛮放,@State在視圖本地。值或數(shù)據(jù)在視圖中本地保存奠宜。它由框架管理包颁,由于它存儲在本地,因此它是一個值類型压真。但是@ObservableObject在視圖外部娩嚼,并且不存儲在視圖中。它是一種引用類型滴肿,因為它不在本地存儲岳悟,而只是具有對該值的引用。這不是由框架自動管理的泼差,而是開發(fā)人員的責(zé)任贵少。這最適用于外部數(shù)據(jù),例如數(shù)據(jù)庫或由代碼管理的模型堆缘。
@Binding也在視圖內(nèi)滔灶,但是與@State區(qū)別在于@Binding用于不通視圖之間的參數(shù)傳遞。@Binding 和@ObservedObbjecg一樣都是傳遞引用吼肥。
@EnvironmentObject 可以理解為全局變量
具體細微差別录平,大家可以訪問demo頁面體驗用途的不同。
看懂上面的文字缀皱,我們就是知道解決方案了斗这。這個問題用@ObservableObject就可以非常好的解決了。