簡體   English   中英

SwiftUI 回調作為視圖的參數

[英]SwiftUI callback as parameter to a view

我試圖將我的 SwiftUI 視圖拆分為盡可能小的可重用組件。 所以我有位於頂部的 MainView,然后有兩個視圖(MyContentView 和 MenuView),它們都位於 MainView 中。 兩個內部視圖都有一些我想在 MainView 中更新某些內容的功能。 所以我想我可以將一些函數作為參數從 MainView 傳遞給內部視圖,所以當在內部視圖中按下按鈕時,它會觸發 MainView 中的代碼。 我設法最接近它的是導致每次更新內部視圖時都會觸發函數參數。 實現這一目標的最佳方法是什么? 這是我的代碼示例:

主視圖:

struct MainView: View {
    var body: some View {
         VStack {
             MyContentView(self.$doSomething)
             MenuView(self.$doSomething)
         }
    }

    func doSomething() {
        print("do something")
    }
}

struct MyContentView : View {
    var doSomething : ()
    var body: some View {
        Button(action: { self.doSomething }) { Text("do something") }
    }
}

struct MenuView : View {
    var doSomething : ()
    var body: some View {
        Button(action: { self.doSomething }) { Text("Menu do something") }
    }
}

能夠從內部視圖接收回調的最佳實踐是什么?

下面的變體作品。 使用 Xcode 11.4 測試。

struct MainView: View {
    var body: some View {
         VStack {
             MyContentView(doSomething: self.doSomething)
             MenuView(doSomething: self.doSomething)
         }
    }

    func doSomething() {
        print("do something")
    }
}

struct MyContentView : View {
    var doSomething : () -> ()
    var body: some View {
        Button(action: { self.doSomething() }) { Text("do something") }
    }
}

struct MenuView : View {
    var doSomething : () -> ()
    var body: some View {
        Button(action: { self.doSomething() }) { Text("Menu do something") }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM