我正在将我的一个 swift 项目转换为 SwiftUI。我需要将委托(delegate)和协议(protocol)转换为 SwiftUI,在 SwiftUI 中是否允许这样做?或有任何替代方法吗?请帮助我,我对 SwiftUI 很困惑。
我正在从我的一个类中调用委托(delegate)方法,然后委托(delegate)方法将出现在另一个 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")
}
}
请帮助我将此代码转换为 SwiftUI
最佳答案
通常,SwiftUI 更喜欢接受回调的模式,而不是协议(protocol)/委托(delegate)。例如,ActionSheet
中的每个按钮都有一个在点击按钮时执行的闭包。
不过,您不应该只是直接转换您的代码。 SwiftUI 是声明式的,对很多事情使用不同的范例。例如,您不会有一个 didFetchInfo
方法,您只需将它分配给一个 @Published 变量。
考虑拥有“单一事实来源”,其中单个变量始终是正确的。例如,List
只是获取一个数组并在数组更改时进行更新,这与 UITableView
不同,后者通过 numberOfRows
和 cellForRowAt 提供数据
。我对您的具体项目了解不多,无法提供更多细节,但这些都是需要考虑的事情。
关于ios - 如何在 SwiftUI 中实现协议(protocol)和委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63260202/