iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 17
1
Mobile Development

[初探] 用 SwiftUI - 打造一個自助洗衣應用系列 第 17

第十七日、SwiftUI - 關於@State 與 @Binding

  • 分享至 

  • xImage
  •  

繼續來談到屬於屬性包裝器
狀態變更的 @State

溝通綁定的 @Binding

用昨天我們Sheet的範例
改成

struct ContentView: View {
    @State var showingisPlay = false

    var body: some View {
        Button(action: {
            self.showingisPlay.toggle()
        }) {
            Image(systemName: showingisPlay ? "pause.circle" : "play.circle")
            }
        }
}

上面範例會因為 showingisPlay 的狀態變更不同的圖示

溝通綁定的 @Binding

那這裡提到 Binding
從apple 提到

Use a binding to create a two-way connection between a property that stores data, and a view that displays and changes the data.

意思是他會作為 視圖 與 元件(資料) 作為溝通的管道
那就廢話不多說

我們先將剛剛的 Button 作為一個元件(子視圖)

struct ButtonView: View {
    @Binding var showingisPlay: Bool

    var body: some View {
        Button(action: {
            self.showingisPlay.toggle()
        }) {
            Image(systemName: showingisPlay ? "pause.circle" : "play.circle")
            }
        }
}

接著是 父視圖

struct ContentView: View {
    @State private var showingisPlay: Bool = false

    var body: some View {
        ButtonView(showingisPlay: $showingisPlay)
    }
}

這樣就完成了兩者之間的連結
連結性會影響你的程式長相(結構)
#使用 @Binding 會因為綁定這件資料,變數上會多加上 $ 符號


上一篇
第十六日、SwiftUI - 頁面的種種事情之3 篇 (sheet)
下一篇
第十八日、SwiftUI - 關於 environment 簡單的闡述
系列文
[初探] 用 SwiftUI - 打造一個自助洗衣應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言