gpt4 book ai didi

swift - 多个回调而不是在 swift 中使用委托(delegate)

转载 作者:行者123 更新时间:2023-11-30 11:43:54 27 4
gpt4 key购买 nike

我正在开发一个必须向机器发送命令的应用程序。我知道如何使用委托(delegate)来传播我在输入流中收到的命令的响应。但对于某些必须更新 UI 的命令,使用回调可能会更好。

我一直在寻找一个好的解决方案来编写此代码,但我找不到。

在此代码中,例如:

class NetworkService {

var onComplete: ((result: String)->())? //an optional function

func fetchDataFromUrl(url: String) {
API.request(.GET, url) { result in
onComplete?(result: result)
}
}

class MyViewController: UIViewController {

let networkService = NetworkService()

override func viewDidLoad() {
super.viewDidLoad()
networkService.onComplete = { result in
print("I got \(result) from the server!")
}
}
}

没关系,我可以使用 onComplete 作为回调,但是...我需要多个命令的多个回调:

  • 我是否需要为每个不同的命令创建一个带有回调的“var”?
  • 有没有办法让数组或队列带有回调?
  • 如果我没有收到命令的响应,并且再次发送该命令,会发生什么情况?我想我必须以某种方式处理超时。
  • 解决此问题的最佳方法是什么?

最佳答案

您尝试过通知吗?在你的 ViewDidLoad 上:

override func viewDidLoad() {
super.viewDidLoad()

NotificationCenter.default.addObserver(self, selector: #selector(dataFetched), name: NSNotification.Name(rawValue: "dataFetched"), object: nil)
networkService.fetchDataFromUrl(url: url)
}

func dataFetched(_ notification: Notification) {
// do your stuff with notification.object
}

在您的 NetworkService 类上

func fetchDataFromUrl(url: String) { 
API.request(.GET, url)
}

func dataFetched(result: Any) {
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "dataFetched"), object: result)
}

关于swift - 多个回调而不是在 swift 中使用委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49051680/

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