委托模式是 SwiftUI 中的好方法吗?

Jon*_*han 10 delegates ios swift swiftui

我正在将 iOS 应用程序从 UIKit 转换为 SwiftUI。我有一个UIViewController显示带有不同按钮的视图。它UIViewController有一个符合特定协议的委托。对于每个按钮的操作,我调用其委托的方法。这里没什么特别的,这是我们都知道使用 UIKit 进行 iOS 开发的典型委托模式。

我的问题是:对于 SwiftUI 来说这仍然是一个好的方法吗?我完全可以在我的 SwiftUI 应用程序中转换这种模式(我已经这样做了。编辑:正如评论中提到的,这不是一个好主意!)。但我想知道这种委托模式是否仍然是一种好方法,或者是否有其他方法可以做到这一点(也许可以使用绑定?)。是否建议在 SwiftUI 应用程序中使用此模式?

这是一个简化的代码示例:

protocol MyCustomViewDelegate {
    func buttonATapped()
}

struct MyCustomView: View {
    public var delegate: MyCustomViewDelegate?
    var body: some View {
        Button("Button A") {
            if let delegate = delegate {
                delegate.buttonATapped()
            }
        }
    }
}

struct ContentView: View, MyCustomViewDelegate {

    var body: some View {
        MyCustomView(delegate: self)
    }

    func buttonATapped() {
        // Do something
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:请不要使用以前的实现!

小智 9

我认为如果你使用闭包会更好,一个传递函数的例子:

 struct MyCustomView: View {
        var function: () -> Void
        var body: some View {
            Button(action: {
                self.function()
            }, label: {
                Text("Button")
            })
        }
    }
    
    struct ContentView: View {
        var body: some View {
            ChildView(function: self.buttonATapped)
        }
        
        func buttonATapped() {
            print("I am the parent")
        }
    }
Run Code Online (Sandbox Code Playgroud)