如何在 SwiftUI 中实现协议和委托

Jan*_*Jan 3 ios swift swiftui

我正在将我的一个 Swift 项目转换为 SwiftUI。我需要将委托和协议转换为 SwiftUI,SwiftUI 允许吗?或者有什么替代方法吗?请帮助我,我对 SwiftUI 很困惑。

我从我的一个类中调用委托方法,然后委托方法将出现在另一个 ViewController 中。

//PresenterClass

protocol SplashPresenterDelegate {
    func didFetchedSystemInfo(info: String)
}
class SplashPresenter: NSObject {
    var delegate: SplashPresenterDelegate?

    func getSystemInfo(){
         self.delegate?.didFetchedSystemInfo(info: "ResponseString") 
    }
}


// Viewcontroller class

class myViewController: UIViewController {
   .
   .
   .
}

extension  myViewController: SplashPresenterDelegate{
   func didFetchedSystemInfo(info: String){
      print("delegate called")
   } 
}

Run Code Online (Sandbox Code Playgroud)

请帮我将此代码转换为 SwiftUI

mgi*_*inn 5

通常,SwiftUI 更喜欢采用回调而不是协议/委托的模式。例如, an 中的每个按钮ActionSheet都有一个在点击按钮时执行的闭包。

不过,您不应该直接转换代码。SwiftUI 是声明性的,在很多事情上使用不同的范例。例如,您没有didFetchInfo方法,只需将其分配给 @Published 变量。

考虑一下“单一事实来源”,其中单个变量始终是正确的。例如,List只需获取一个数组并在数组更改时进行更新,这与通过和UITableView提供数据的情况不同。我对你的具体项目了解不够,无法提供更多细节,但这些都是需要考虑的事情。numberOfRowscellForRowAt