用Swift构建一个简单的iOS邮件应用的方法

2020-01-08 22:58:09刘景俊

我们的应用将展示来自Inbox的未读线程,每次一个,所以我们这样定义线程供应者:

 

复制代码 var provider:INThreadProvider! = namespace?.newThreadProvider();
provider.itemFilterPredicate = NSComparisonPredicate(format: "ANY tagIDs = %@", INTagIDInbox)
provider.itemSortDescriptors = [NSSortDescriptor(key: "lastMessageDate", ascending: false)]
provider.delegate = self
 
self.threadProvider = provider

 


由于我们已经创建了一个线程供应者,我们就可以使用它的条目数组来存放我们的视图. 供应者不会同步获取结果集, 所以我们需要实现INModelProviderDelegate协议并监听更新. 当新的线程通过以下方式被创建的时候,供应者会调用-providerDataChanged 方法,这些创建新线程的方式包括:1.从缓存从获取 2.通过API加载 3.(某个时间)通过网络数据包被推送到应用. 实现协议确保了我们的应用总是显示最新的数据.

还有其他一些代理方法,比如 providerDataAltered:它让基于UICollection或者
UITableView创建邮箱用户界面变得更简单,同时可以使用各种插入删除动画效果.但是目前,我们继续看一些基础的东西.
 

复制代码 func refreshInterface() {
    var items = self.threadProvider!.items
 
    if items.count == 0 {
        // display empty state
        self.subjectLabel.text = "No unread threads!"
        self.snippetLabel.text = ""
        self.participantsLabel.text = ""
        self.dateLabel.text = ""
    }
 
    if let thread = items[0] as? INThread {
        // display the thread
        self.subjectLabel.text = thread.subject
        self.snippetLabel.text = thread.snippet
        self.dateLabel.text = formatter.stringFromDate(thread.lastMessageDate);
 
        ....
    }}func providerDataChanged(provider: INModelProvider!) {
    self.refreshInterface()}func provider(provider: INModelProvider!, dataFetchFailed error: NSError!)  {
    self.displayError(error);}