Swift Practice # 166 SwiftUI Use Same ViewModel In Different View 在SwiftUI共用ViewModel

Dogpa Chen
Jul 13, 2022

上一篇理解了關於Link的多能使用,能夠快速透過Link去想去的應用程式

而這一篇則要重新理清自己的觀念,在自己的預計內side project預計會在不同的View內去使用同一個ViewModel,之前也有嘗試這樣的寫法無奈遇到一些問題,簡單而言是自己的觀念錯誤。首先先來看看錯誤的觀念為何。

首先建立一ViewModel,裡面有一個變數與三個Function,各自負責變數的加、減、重置。

接著實作一個BindingView,透過Binding去綁定IntViewModel。

接著嘗試在ContentView使用這個BindingView,來看看報錯的結果:

ObservedObject與Binding是衝突的,之前的概念以為Binding不管是誰就是$符號加上去就可以使用了,但是在ViewModel使用了ObservedObject所以造成了類型的錯誤與衝突。那到底要怎麼解決?其實也沒很困難就是透過@StateObject來接ViewModel就好。

接下來分別建立FirstView與SecondView分別使用同一個ViewModel

FirstView:

SecondView:

接著在ContentView建立上述兩個View。

來看看是否兩個View都共用同一個ViewModel

從上面的Gif可以看到某一個View執行ViewModel的Function時,因為都是觀察同一個ViewModel內的變數,所以會上下兩個View會一起改變,也算是達到自己需要的使用狀況。回想這個觀念與使用方法其實也沒很難,不知道為什麼自己會使用到Binding去綁定,但也在此重新釐清自己的觀念。持續加油!!!

--

--