在 swift 中与代表一起工作

Working with delegate in swift

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

我有一个 MessageFetcher class,它从 url.

中获取消息
class MessageFetcher {
 func getCurrentMessagesFromString(urlStringL: String) {..}
}

我创建了一个协议

protocol MessageFetcherDelegate {
 func currentMessagesDidUpdate()
}

我有一个显示消息并符合 MessageFetcherDelegate 协议的视图控制器:

class MessagesViewController: UIViewController, MessageFetcherDelegate {

 var messageFetcher = MessageFetcher()
 var delegate: MessageFetcherDelegate?

 override func viewDidLoad() {
  delegate = self
 }

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

我希望在获取程序更新消息数组并重新加载集合视图数据时通知视图控制器。

我哪里错了,我需要补充什么?如何通知控制器消息已更新?

在您的 class 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 中调用委托方法,在获取程序更新消息时添加此代码:

delegate?.currentMessagesDidUpdate()