iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
Mobile Development

SwiftUI學習之旅系列 第 14

Day 14:Property Wrapper(1)

  • 分享至 

  • xImage
  •  

今天來介紹一個在 SwiftUI 裡很重要的東西,Property Wrapper,也就是屬性包裝器。

那介紹之前先來了解一下 Property Wrapper 是什麼,Property Wrapper 通常是用來打包 ”計算屬性“ 或是 “屬性觀察” 的功能,方便重複使用。

而一個帶有 Property Wrapper 的屬性會產生三個屬性:

1. 屬性:指儲存的值
2. _屬性:指 Property Wrapper 本身
3. $屬性:指投射屬性,可設定成任何屬性

而其中第三種帶 $ 符號版本的不一定有,Property Wrapper 內必須要有設定 ProjectedValue 才能使用。

那先來介紹幾種常用的 Property Wrapper。

@State

首先要介紹的是這個:@State。

正常情況下,我們要對一個值進行存儲及更新,要去設定 class,設定畫面更新,是不是感覺很麻煩。

於是 SwiftUI 提供了一個 Property Wrapper 將這些事情包裝起來。當我們要對一個 Value type 的數值變化做管理時,在數值前面加上 @State,這樣一來,當這個數值有變化時,@State 會去通知這個畫面要去做更新。

具體效果如下。

只要在 testString 前加上 @State,每當我按下 Button 時,@State 就會通知畫面要去更新 Text 的值。

還有,在使用 @State 時要注意,要確保 @State 只屬於建立他的那個 View,讓他的生命週期跟著畫面,所以在使用的時候,可以設定為 private,來避免外部啟用,或是避免使用帶有 _ 符號的屬性。

而 @State 本身帶有 $ 符號的投射屬性是 Binding,這個就會直接連接到 @State 裡面打包的值,而這個 Binding 其實也是一個 Property Wrapper,關於他的部分之後會再介紹。

以及,如果只是要對畫面做更新,那 @State 放在哪一層都是可以的,但是如果是要使用同一筆資料,那需要將 @State 寫在最上層之後再用 @Binding 去做串連。

那今天就先介紹到這邊,明天來介紹剛剛提到的 @Binding 和另一個 Property Wrapper。


上一篇
Day 13:關於處理 Retain Cycle
下一篇
Day 15:Property Wrapper(2)
系列文
SwiftUI學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言