我想知道如何处理委托和协议。
我有一个从url获取消息的MessageFetcher类。

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()
 }
}

我希望在获取程序更新消息数组并重新加载集合视图数据时通知视图控制器。
我哪里做错了,我需要补充什么?如何通知控制器消息已更新?

最佳答案

在类中,需要添加不在MessageFetcher中的委托属性:

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()
 }
}

现在剩下要做的是在MessagesViewController中调用delegate方法,在fetcher更新消息后添加此代码:
delegate?.currentMessagesDidUpdate()

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

10-17 00:52