gpt4 book ai didi

swift - swift 与委托(delegate)合作

转载 作者:行者123 更新时间:2023-11-28 13:18:14 28 4
gpt4 key购买 nike

我正在尝试弄清楚如何使用委托(delegate)和协议(protocol)。

我有一个 MessageFetcher 类,它从 url 中获取消息。

class MessageFetcher {
func getCurrentMessagesFromString(urlStringL: String) {..}
}

我创建了一个协议(protocol)

protocol MessageFetcherDelegate {
func currentMessagesDidUpdate()
}

我有一个显示消息并符合 MessageFetcherDelegate 协议(protocol)的 View Controller :

class MessagesViewController: UIViewController, MessageFetcherDelegate {

var messageFetcher = MessageFetcher()
var delegate: MessageFetcherDelegate?

override func viewDidLoad() {
delegate = self
}

func currentMessagesDidUpdate() {
collectionView.reloadData()
}
}

我希望在 getter 更新消息数组并重新加载 Collection View 数据时通知 View Controller 。

我哪里出错了,我需要添加什么?如何通知 Controller 消息已更新?

最佳答案

在您的类 MessageFetcher 中,您需要添加不在 MessagesViewController 中的委托(delegate)属性:

class MessageFetcher {
func getCurrentMessagesFromString(urlStringL: String) {..}
var delegate: MessageFetcherDelegate?
}

您的 MessagesViewController 应该如下所示,请参阅注释以获取解释:

class MessagesViewController: UIViewController, MessageFetcherDelegate {

var messageFetcher = MessageFetcher()

override func viewDidLoad() {
// Declare MessagesViewController class as a deleagte od message Fetcher
messageFetcher.delegate = self
}

func currentMessagesDidUpdate() {
collectionView.reloadData()
}
}

现在剩下要做的是在 MessageFetcher 中调用委托(delegate)方法,在获取程序更新消息时添加此代码:

delegate?.currentMessagesDidUpdate()

关于swift - swift 与委托(delegate)合作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27938786/

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