在swift中使用委托

时间:2015-01-14 08:42:53

标签: swift delegates

我试图弄清楚如何使用代理和协议。

我有一个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数组并重新加载集合视图数据时通知视图控制器。

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

1 个答案:

答案 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()