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

标签 ios swift swiftui

我正在将我的一个 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/

相关文章:

android - Cordova CLI "cordova build android"错误 "Does not appear to be an xcode project, no xcode project file in..."?

swift - UITableView 单元格背景自定义颜色

ios - CollectionView 在键盘出现时向上移动,然后返回到之前的位置

ios - 在 SwiftUI 中使用用户输入来执行计算

swift - 如何在 SwiftUI 中为 View 之间的过渡设置动画?

ios - Sprite 套件中的 UIImageView

ios - 如何从 WKWebView 打印特定的 iFrame

iphone - 使用 Core Graphics 绘制图形线

swift - 跨不同行分割字符串 Swift 2.0

swiftui - 使用 SwiftUI Mapkit 调整 map 大小的问题