2015-01-14 132 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()