最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用Swift構(gòu)建一個(gè)簡(jiǎn)單的iOS郵件應(yīng)用的方法

 更新時(shí)間:2015年07月14日 15:44:13   投稿:goldensun  
這篇文章主要介紹了用Swift構(gòu)建一個(gè)簡(jiǎn)單的iOS郵件應(yīng)用的方法,包括查看和標(biāo)記已讀等基本的郵件應(yīng)用功能,需要的朋友可以參考下

在前幾個(gè)月內(nèi),我一直在做InboxKit的研究,它是關(guān)于Inbox平臺(tái)的IOS SDK。Inbox為和郵件數(shù)據(jù)的交互提供高層API,使得你可以忽略IMAP,Exchange,MIME的解析以及thread探測(cè)(當(dāng)然還有很多其他事情...),并使你致力于完成富有創(chuàng)意的APP的創(chuàng)作上。我們的目標(biāo)很簡(jiǎn)單:盡可能地打造一個(gè)優(yōu)雅的,跨提供商的郵件應(yīng)用。畢竟,它很難。

在Objective-C中,InboxKit使得創(chuàng)建郵件體驗(yàn)變得很輕松,那么,Swift又如何呢?Swift在WWDC后已正式被IOS社區(qū)所采納,我認(rèn)為以后的SDK設(shè)計(jì)肯定會(huì)包括既有Objective-C又有Swift寫的樣例。

我們的第一個(gè)Swift例子,我想寫一個(gè)簡(jiǎn)單的app,它就像一個(gè)魔幻8球:

  •     顯示Inbox中未讀thread
  •     當(dāng)你搖動(dòng)手機(jī),標(biāo)記thread為已讀并顯示新的thread

(譯者注:文中的thread并不是線程的意思,在論壇中的一個(gè)帖子叫thread,回復(fù)叫post.這里可理解為一封郵件)

在 Swift 中使用 Objective-C SDK

InboxKit有6000行Objective-C代碼,我們還不打算把他們都轉(zhuǎn)換成Swift。為了編譯我們的Swift郵件應(yīng)用,我更新了open-source SDK,包含了“Xcode 6 自定義框架“。自定義框架是Xcode6的新特色-支持第三方框架的創(chuàng)建和分發(fā)。當(dāng)DEFINES_MODULE標(biāo)志設(shè)置為可用時(shí),自定義框架會(huì)自動(dòng)為Swift準(zhǔn)備Objective-C模塊的頭文件。在Swift編譯時(shí),它會(huì)讀取這個(gè)模塊頭文件,把Objective-C的類和方法映射到Swift。

Cocoa Touch框架包含這個(gè)SDK之后,在Swift中使用很簡(jiǎn)單。比如我創(chuàng)建了一個(gè)新的Swift應(yīng)用,只需要把這個(gè)SDK拖入工程中,然后在root view controller中添加import InboxKit。

Xcode 6 自定義框架非常棒, 可是目前只有Xcode 6和iOS 8支持. 如果你正在開發(fā)一款應(yīng)用程序, 你仍然可以選擇pod InboxKit。

查看郵件

InboxKit 讓我們從Inbox同步引擎獲取郵件數(shù)據(jù)變得簡(jiǎn)單起來。我們實(shí)例化一個(gè) INThreadProvider ,以此展示來自我們郵箱賬號(hào)的線程,并且具象化需要的數(shù)據(jù)。供應(yīng)者模型 是InboxKit的一個(gè)核心概念: 他們被用于獲取線程,信息,聯(lián)系人和更多東西的集合 。供應(yīng)者有點(diǎn)類似于Core Data中的 NSManagedObjectContext 和 YapDatabase的視圖——他們把復(fù)雜的東西封裝在內(nèi)部,只是暴露出一個(gè)結(jié)果集,這個(gè)結(jié)果集是基于你提供的配置。 在InboxKit,供應(yīng)者從本地SQLite store拉取緩存數(shù)據(jù),同時(shí),讓對(duì)于Inbox API 的詢問變得透明。

我們的應(yīng)用將展示來自Inbox的未讀線程,每次一個(gè),所以我們這樣定義線程供應(yīng)者:

 

復(fù)制代碼 代碼如下:
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


由于我們已經(jīng)創(chuàng)建了一個(gè)線程供應(yīng)者,我們就可以使用它的條目數(shù)組來存放我們的視圖. 供應(yīng)者不會(huì)同步獲取結(jié)果集, 所以我們需要實(shí)現(xiàn)INModelProviderDelegate協(xié)議并監(jiān)聽更新. 當(dāng)新的線程通過以下方式被創(chuàng)建的時(shí)候,供應(yīng)者會(huì)調(diào)用-providerDataChanged 方法,這些創(chuàng)建新線程的方式包括:1.從緩存從獲取 2.通過API加載 3.(某個(gè)時(shí)間)通過網(wǎng)絡(luò)數(shù)據(jù)包被推送到應(yīng)用. 實(shí)現(xiàn)協(xié)議確保了我們的應(yīng)用總是顯示最新的數(shù)據(jù).

還有其他一些代理方法,比如 providerDataAltered:它讓基于UICollection或者
UITableView創(chuàng)建郵箱用戶界面變得更簡(jiǎn)單,同時(shí)可以使用各種插入刪除動(dòng)畫效果.但是目前,我們繼續(xù)看一些基礎(chǔ)的東西.
 

復(fù)制代碼 代碼如下:
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);}


標(biāo)記為已讀

在我們的 swift 示例程序中,我們要在用戶搖動(dòng)手機(jī)的時(shí)候,把當(dāng)前線程標(biāo)記為已讀,并且顯示一個(gè)新的線程。用InboxKit,標(biāo)記為已讀是非常簡(jiǎn)單的。
 

復(fù)制代碼 代碼如下:
override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent!) {
    if (motion == UIEventSubtype.MotionShake) {
        var items = self.threadProvider!.items
        if let thread = items[0] as? INThread {
            thread.markAsRead()
        }
    }}

在后臺(tái),-markAsReadqueues這個(gè)方法使新的API動(dòng)作進(jìn)入隊(duì)列,通過這種行為來從線程中移除未讀標(biāo)簽。 INThread對(duì)象和本地存儲(chǔ)的數(shù)據(jù)會(huì)被立刻更新,但是這個(gè)動(dòng)作將會(huì)在手機(jī)上排隊(duì),直到可以建立
連接。如果服務(wù)器拒絕這次的動(dòng)作,那么本地的數(shù)據(jù)也會(huì)回滾。

我們不需要刷新我們的線程供應(yīng)者-我們的工作已經(jīng)完成!如果當(dāng)前線程被標(biāo)記為已讀,那么它就不再需要滿足我們線程供應(yīng)者結(jié)果集的標(biāo)準(zhǔn).供應(yīng)者會(huì)自動(dòng)
匹配它的內(nèi)容,并且調(diào)用providerDataChanged方法,我們實(shí)現(xiàn)的代理方法將會(huì)刷新我們顯示,來展現(xiàn)新集合中的第一個(gè)線程。

接下來的步驟

好了! 只用了幾十行代碼,我們就創(chuàng)建了一個(gè)示例程序,它可以從我們的收件箱一條條的獲取線程,并且讓我們標(biāo)記為已讀.現(xiàn)在它僅僅需要點(diǎn)動(dòng)畫和潤(rùn)色.你可以從這里查看demo的源碼:
: SwiftEightBall Sample App

我們僅僅接觸了InboxKit的一些淺顯的東西.在IOS SDK的上層創(chuàng)建我們的swift應(yīng)用,這意味著我們需要為模型獲取本地類的支持,比如線程和通訊錄,
以及因?yàn)橹С盅訒r(shí)線程和消息動(dòng)作的SQLite而變得更強(qiáng)大的離線緩存.
看看iOS SDK documentation 學(xué)習(xí)一下更多關(guān)于在郵件上層創(chuàng)建美觀大方應(yīng)用的知識(shí).

相關(guān)文章

  • Swift?指針底層探索分析

    Swift?指針底層探索分析

    這篇文章主要為大家介紹了Swift?指針底層探索分析,主要包括指針的基本使用,以及指針的內(nèi)存綁定進(jìn)行詳細(xì)分析,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • openstack重啟swift服務(wù)后報(bào)錯(cuò)問題解決方案

    openstack重啟swift服務(wù)后報(bào)錯(cuò)問題解決方案

    這篇文章主要介紹了解決openstack重啟swift服務(wù)后報(bào)錯(cuò),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • 判斷?ScrollView List?是否正在滾動(dòng)詳解

    判斷?ScrollView List?是否正在滾動(dòng)詳解

    這篇文章主要為大家介紹了判斷?ScrollView、List?是否正在滾動(dòng)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Swift教程之閉包詳解

    Swift教程之閉包詳解

    這篇文章主要介紹了Swift教程之閉包詳解,閉包可以在上下文的范圍內(nèi)捕獲、存儲(chǔ)任何被定義的常量和變量引用,因這些常量和變量的封閉性,而命名為“閉包(Closures)”,需要的朋友可以參考下
    2015-01-01
  • Swift3.0剪切板代碼拷貝及跨應(yīng)用粘貼實(shí)現(xiàn)代碼

    Swift3.0剪切板代碼拷貝及跨應(yīng)用粘貼實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了Swift3.0剪切板代碼拷貝及跨應(yīng)用粘貼的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • SwiftUI自定義導(dǎo)航的方法實(shí)例

    SwiftUI自定義導(dǎo)航的方法實(shí)例

    導(dǎo)航是我們平時(shí)經(jīng)常會(huì)遇到的一個(gè)需求,下面這篇文章主要給大家介紹了關(guān)于SwiftUI自定義導(dǎo)航的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • RxSwift發(fā)送及訂閱 Subjects、Variables代碼示例

    RxSwift發(fā)送及訂閱 Subjects、Variables代碼示例

    這篇文章主要介紹了RxSwift發(fā)送及訂閱 Subjects、Variables代碼示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 舉例講解Swift編程中switch...case語(yǔ)句的用法

    舉例講解Swift編程中switch...case語(yǔ)句的用法

    這篇文章主要介紹了Swift編程中switch...case語(yǔ)句的用法,其中fallthrough關(guān)鍵字在switch語(yǔ)句中的使用是重點(diǎn),需要的朋友可以參考下
    2016-04-04
  • 使用swift實(shí)現(xiàn)計(jì)算器功能

    使用swift實(shí)現(xiàn)計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了使用swift實(shí)現(xiàn)計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Swift編程中的一些類型轉(zhuǎn)換方法詳解

    Swift編程中的一些類型轉(zhuǎn)換方法詳解

    這篇文章主要介紹了Swift編程中的一些類型轉(zhuǎn)換方法詳解,是Swift入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11

最新評(píng)論

全南县| 清河县| 萨嘎县| 罗平县| 大竹县| 洪湖市| 秦皇岛市| 九龙坡区| 武宣县| 泌阳县| 乐亭县| 桃园市| 河东区| 甘孜县| 余干县| 石门县| 中西区| 红原县| 德江县| 黔南| 东港市| 绵竹市| 白沙| 榆树市| 登封市| 宣城市| 莱阳市| 颍上县| 如皋市| 淳安县| 台北县| 个旧市| 舞钢市| 葫芦岛市| 宜兰市| 台湾省| 湖南省| 芜湖市| 叶城县| 寿宁县| 云南省|