2015-01-14 125 views
0

我试图弄清楚如何使用委托和协议。在swift中使用委托

我有一个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() 
} 
} 

我想视图控制器时得到通知fetcher已更新消息数组并重新加载收集视图数据。

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

回答

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