我试图弄清楚如何使用代理和协议。
我有一个MessageFetcher类,它从一个URL中获取消息。
class MessageFetcher {
func getCurrentMessagesFromString(urlStringL: String) {..}
}
我创建了一个协议
protocol MessageFetcherDelegate {
func currentMessagesDidUpdate()
}
我有一个View控制器,它显示消息并符合MessageFetcherDelegate协议:
class MessagesViewController: UIViewController, MessageFetcherDelegate {
var messageFetcher = MessageFetcher()
var delegate: MessageFetcherDelegate?
override func viewDidLoad() {
delegate = self
}
func currentMessagesDidUpdate() {
collectionView.reloadData()
}
}
我希望在fetcher更新messages数组并重新加载集合视图数据时通知视图控制器。
我哪里出错了,我需要添加什么?如何通知控制器消息已更新?
答案 0 :(得分:2)
在您的班级MessageFetcher
中,您需要添加不在MessagesViewController
中的委托属性:
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
内调用委托方法,在fetcher更新消息时添加此代码:
delegate?.currentMessagesDidUpdate()