Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在swift中与代表一起工作_Swift_Delegates - Fatal编程技术网

在swift中与代表一起工作

在swift中与代表一起工作,swift,delegates,Swift,Delegates,我想弄清楚如何与代表和协议一起工作 我有一个MessageFetcher类,它从url获取消息 class MessageFetcher { func getCurrentMessagesFromString(urlStringL: String) {..} } 我创建了一个协议 protocol MessageFetcherDelegate { func currentMessagesDidUpdate() } 我有一个视图控制器,它显示消息并符合MessageFetcherDeleg

我想弄清楚如何与代表和协议一起工作

我有一个MessageFetcher类,它从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()
 }
}
我希望在获取程序更新消息数组并重新加载集合视图数据时通知视图控制器


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

在类
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方法,在fetcher更新消息时添加以下代码:

delegate?.currentMessagesDidUpdate()