iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 9
0
自我挑戰組

Swift - 來吧!鐵人三十項系列 第 9

Day09:好奇寶寶之來玩玩 SwiftUI - @State

  • 分享至 

  • xImage
  •  

前前言

嗨,大家好,我是 Lacie,您現在收看的是 Swift - 來吧!鐵人三十項 系列的第九篇
在鐵人賽完結後,為保持持續做筆記的習慣
將會在我的 Medium 繼續撰寫文章,若有興趣者可前往觀看。


前言

上次介紹 APP 進度時,長這個樣子:

故今天來詳細看一下,目前用了哪些東西
順便也加快一下進度,趕快做完,然後開始補 Swift 的基礎


@State and Struct

第一個要講的是 SwiftUI 的特色:@State
但我不敢寫太多,怕寫錯誤導大家,還怕被大神鞭打/images/emoticon/emoticon16.gif
@State還有其他兩個兄弟:@ObjectBinging 和 @EnvironmentObject
三個各自應用的狀況都不同,但後面兩個目前還沒用到且好高深,先不提
今天講述的內容是翻譯自大神 Paul Hudson 的 SwiftUI Tutorial: What's the difference between @State, @ObjectBinding, and @EnvironmentObject? 若有興趣可以看看

SwiftUI 使用的是 Struct ,關於 Struct 可以參考 Class vs Struct 超級比一比
由於 Struct 沒辦法輕易覆寫已儲存的值,想要修改會報錯:

但現在有了 @State 使我們可以 manage 這個值,它可以被更改了
並且 @State 的值一但變更了,SwiftUI 知道要自動去 reload body of the view

(圖片取自Paul Hudson 的 SwiftUI Tutorial: What's the difference between @State, @ObjectBinding, and @EnvironmentObject?

(圖片取自Paul Hudson 的 SwiftUI Tutorial: What's the difference between @State, @ObjectBinding, and @EnvironmentObject?

(圖片取自Paul Hudson 的 SwiftUI Tutorial: What's the difference between @State, @ObjectBinding, and @EnvironmentObject?

(圖片取自Paul Hudson 的 SwiftUI Tutorial: What's the difference between @State, @ObjectBinding, and @EnvironmentObject?

故我們可以修改我們的 score 使 TapCounter 可以運作:


@State and two-way binding

@State 的另一個特色是 two-way binding,簡單來說就是雙向更新


(圖片取自Paul Hudson 的 SwiftUI Tutorial: What's the difference between @State, @ObjectBinding, and @EnvironmentObject?

直接上個範例來看看:

  • 一個 @State score 、一個顯示它的 Text 、一個 Slider(吃的參數是 $score)

  • 初始畫面

  • 隨著拉動 Slider,也會跟著更改 score 的值並更新 UI


最後,來看看,畫面上用了哪些東西:

Text、Button、Alert、NavigationBarTitle、NavigationLink(換頁)、Slider 及排版
好,讓我們下集再來看看 code


上一篇
Day08:好奇寶寶之來玩玩 SwiftUI - 排列
下一篇
Day10:好奇寶寶之來玩玩 SwiftUI - 繼續做 APP(1)
系列文
Swift - 來吧!鐵人三十項30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言