gpt4 book ai didi

ios - 如何在 SwiftUI 中实现协议(protocol)和委托(delegate)

转载 作者:行者123 更新时间:2023-12-05 02:05:43 27 4
gpt4 key购买 nike

我正在将我的一个 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 不同,后者通过 numberOfRowscellForRowAt 提供数据。我对您的具体项目了解不多,无法提供更多细节,但这些都是需要考虑的事情。

关于ios - 如何在 SwiftUI 中实现协议(protocol)和委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63260202/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com