SwiftMarch

Swift 發(fā)展趨勢喜人肋杖,Github 上已經(jīng)有很多相關的開源項目永罚,也有一些人進行了收集。然而我們如何判斷某個開源庫能否安心的在項目中使用呢宋舷?畢竟不是誰都有時間或者能力讀完全部的源碼,有些庫即使讀了源碼也無法立刻得出是是否可以大規(guī)模的應用瓢姻。

因此祝蝠,我們決定作出一點努力。我們會篩選出廣泛應用于實際 Swift 項目的開源庫幻碱,并且從一線開發(fā)者中搜集相關的評價绎狭。如果你打算開始一個 Swift 項目,希望這里面的信息對你有幫助褥傍。

如果你覺得某個開源庫很棒而我們遺漏了可以開 PR 給我們儡嘶,或者對我們公布的某些庫有獨到的評價可以通過 PR 告訴我們,我們會盡快處理恍风。

網(wǎng)絡

Alamofire

Swift 中使用最廣泛的網(wǎng)絡庫蹦狂。由大神 matt 負責誓篱,值得信賴】ǎ可以看介紹:全身心擁抱開源的開發(fā)者 Mattt Thompson窜骄。需要提醒的是 4.1.0 的版本支持 iOS 8 , 4.0 的版本只支持 iOS 9 摆屯。

JSON 解析

SwiftyJSON

SwiftyJSON 應該算是最老牌的 JSON 解析庫之一邻遏,安全快捷又不啰嗦。知道的人多虐骑,用的人多党远,星星也多。對于嵌套復雜的 JSON 數(shù)據(jù)依然能夠如字典取值般簡單富弦;靈活地與 if let 配合使用沟娱,更不用擔心取到了錯誤的數(shù)據(jù)。

ObjectMapper

JSON 解析是 iOS 開發(fā)中再常見不過的了腕柜,也許你只聽過上面星星很多的 SwiftyJSON济似,但是我相信你用過 ObjectMapper 后一定會喜歡上它的。首先 ObjectMapper 使用起來非常簡潔盏缤,配合 JSON Export 使用砰蠢,你完全不需要在嵌套的 JSON 數(shù)據(jù)里摸不著北,它還支持結構體和自定義轉換唉铜。同時台舱,ObjectMapper 還遵守面向協(xié)議編程的范式,你的 Model 只需要實現(xiàn) Mappable 協(xié)議就可以了潭流,這會讓你的代碼更 Swifty竞惋。如果你想讓你的 Model 看起來既優(yōu)雅又清爽,那么我建議你一定要試一試這個庫灰嫉。

這是 ObjectMapper 的中文文檔翻譯拆宛。

存儲

YYCache

輕量級緩存的最可靠選擇。不得不承認的一個事實是目前沒有一個用 Swift 編寫的優(yōu)秀緩存庫讼撒。最流行的 Haneke 作者在 2.3 版本后已經(jīng)放棄維護浑厚,當然本身 Haneke 的實現(xiàn)也不算優(yōu)秀。雖然 OC 中的基本數(shù)據(jù)對象在 Swift 中使用需要經(jīng)過類型轉換根盒,但是經(jīng)過實際測試這部分性能損失在日常業(yè)務處理中并沒有多大的影響钳幅,屬于可以接受的范圍。

具體設計介紹參考作者寫的:YYCache 設計思路與技術細節(jié)炎滞。

Realm

Realm 是由硅谷創(chuàng)業(yè)公司發(fā)布的一款可以用于 iOS 和 Android 的跨平臺移動數(shù)據(jù)庫敢艰。支持的平臺包括 Java,Objective-C厂榛,Swift盖矫,React Native,Xamarin击奶。是第一個專門針對移動平臺的數(shù)據(jù)庫辈双,立志取代 SQLite 、CoreData柜砾。核心數(shù)據(jù)引擎由 C++ 開發(fā)湃望,有著優(yōu)異的性能。簡單易用可以快速上手痰驱,在數(shù)據(jù)存儲時再也不用思考煩人的底層技術細節(jié)证芭。

基于技術選型的限制,目前 Realm 使用中也有一些明顯的不便:

  • Realm 沒有自動增長屬性

    Realm 沒有線程/進程安全的自動增長屬性機制担映,這在其他數(shù)據(jù)庫中常常用來產(chǎn)生主鍵

  • 所有的數(shù)據(jù)模型必須直接繼承自 RealmObject 废士。這阻礙我們利用數(shù)據(jù)模型中的任意類型的繼承。以下是不能完成的:

    • 多態(tài)類之間的轉換(例如子類轉換成子類蝇完,子類轉換成父類官硝,父類轉換成子類等)
    • 同時對多個類進行檢索
    • 多類容器 (RLMArray 以及 RLMResults)
  • NSData 以及 NSString 屬性不能保存超過 16 MB 大小的數(shù)據(jù)

  • 不能自定義 getter、setter

    realm會自動生成 getter短蜕、setter 氢架,如果自定義 getter 、setter 存儲就會有影響朋魔。如果要規(guī)避這個問題岖研,可以通過設置這個對象的忽略屬性。

  • 查詢的結果不是數(shù)組

    為了能夠支持查詢結果的鏈式查詢警检,realm 自定義了一個集合類型孙援。可以枚舉扇雕,但是不是熟悉的數(shù)組了赃磨。又因為realm的懶加載機制,所以不建議在數(shù)據(jù)層把這個枚舉轉成數(shù)組類型洼裤。這樣的缺點就是上層知道了數(shù)據(jù)的存儲邏輯邻辉。嚴格的說這里不應該讓上層知道。但是這樣設計也許是為了方便上層進行再次檢索腮鞍,realm有著優(yōu)越的查詢性能值骇。

  • 盡管 Realm 文件可以被多個線程同時訪問,但是您不能跨線程處理 Realms移国、Realm 對象吱瘩、查詢和查詢結果

  • Realm不能支持原生的集合類型,比如:NSArray 迹缀、NSDictionary 使碾、NSSet 等蜜徽。需要使用 Realm 里面提供的集合類型 RLMArray(OC),List(Swift)

關于 Realm 的基本情況介紹票摇,可以看這篇文章:移動端數(shù)據(jù)庫新王者:realm拘鞋。

關于 Realm 的詳細使用,可以查看官方文檔矢门。

更多的具體分析盆色,請前往Realm數(shù)據(jù)庫 從入門到“放棄”

圖片存儲

Kingfisher

Kingfisher 是 Swift 中使用比較廣泛的圖片存儲庫祟剔。由喵神 onevcat 開源及維護隔躲。 Kingfisher 輕量級,純 Swift 編寫物延,目的是為了解決從網(wǎng)絡上下載圖片和緩存圖片的問題宣旱。Kingfisher 的靈感主要來源于 SDWebImage,采用的存儲機制和 SDWebImage一樣叛薯,所以性能上沒有太大區(qū)別响鹃,然而卻有著更加靈活友好的 API。

目前支持 iOS 8.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+案训,Swift 3 (Kingfisher 3.x), Swift 2.3 (Kingfisher 2.x)买置。

關于 Kingfisher 的使用,詳細請看這篇文檔强霎。

布局

SnapKit

如果你使用 Autolayout 布局忿项,Snapkit 就是最好的第三方庫。完整的提供了底層的能力城舞。創(chuàng)造性的引入鏈式編程轩触,讓使用起來非常的方便。

UI

Reusable

UITableView 必備家夺。更加優(yōu)雅的實現(xiàn) Cell 的 Register 和 Reuse 脱柱。使用參考:Reusable-讓你放肆的dequeueReusableCell

Util

SwiftDate

非常好用的幫助處理 Date 相關的庫拉馋。靈活運用了 swift 的重載操作符榨为、擴展等特性,使得時間可以直觀的進行算術運算:比較大小煌茴,直接加減等随闺。常見的時間也字符串的轉換也做了良好的支持。

MonkeyKing

MonkeyKing 幫助開發(fā)者快速集成國內主流社交應用(微信蔓腐、微博矩乐、QQ、支付寶)的分享回论、授權散罕、支付等功能分歇。重要的是,不需要集成各種官方 SDK欧漱。目前由 4 名程序員維護职抡。可用于生產(chǎn)環(huán)境硫椰、輕量級,能滿足絕大部分的分享萨蚕、授權靶草、支付等需求。

EZSwiftExtensions

提供了一系列對于 Swift 標準庫岳遥、方法與 UIKit 的擴展奕翔,讓你更加簡單舒服地編寫代碼。

R.swift

配置稍微有一點復雜浩蓉,然而付出的努力對于項目而言是值得的派继。R.swfit 會根據(jù)項目文件在編譯期生成各種資源文件的枚舉,比如 nib 捻艳、UIImage 等驾窟。大幅度減少了使用資源文件時輸入字符串的這種痛苦。有一個缺點就是這個庫只適合使用在純 Swift 項目中认轨∩鹇纾可以參考:R.swift:以一種優(yōu)雅安全的方式使用資源文件

SwiftyAttributes

先進的 API 嘁字,操作 attributed 字符串的利器恩急。

加密

CryptoSwift

非常流行的加密解密庫,項目配有完善的單元測試纪蜒,可以放心使用衷恭。

KeychainAccess

輕量級 Keychain 封裝,簡單到極致的接口。支持 TouchID 與 Keychain 整合纯续,詳細随珠、優(yōu)雅、簡明的 README猬错。Objective-C 版本在這里

Debug

XCGLogger

由于 Swift 本身不包含 C 的預編譯器牙丽,導致開發(fā)者不能使用在 OC 中定義過的宏定義進行調試打印。簡單的打印調用棧的信息兔魂,又會漏掉很多有用信息烤芦。想要解決這個問題又需要加入更多的代碼∥鲂#基于這個目的构罗, XCGLogger 給純的 Swift 項目帶來了解決方案铜涉。 XCGLogger 允許你在控制臺記錄任何細節(jié),使用起來極其簡單遂唧,和使用 nslog() 或 print() 一樣方便芙代。 XCGLogger 可以打印任何信息,甚至可以打印日期盖彭、函數(shù)名纹烹、文件名和行號等等。

CocoaLumberjack

OC 時代最好用的記錄日志的開源庫≌俦撸現(xiàn)在同時有 OC 版和 swift 版本提供铺呵。

自動化

Fastlane

iOS 中最好用的自動化工具。提供了獲取證書隧熙、運行自動化測試片挂、上傳至 TestFlight 和 AppStore 等功能。配置簡單贞盯,社區(qū)強大音念,具體的功能可以到這個網(wǎng)站查看:fastlane.tools

Functional Reactive Programming

使用響應式編程框架統(tǒng)一對委托躏敢、回調 blocks 闷愤、通知 、控件的事件 件余、KVO 等異步事件的邏輯處理肝谭。可以顯著的降低代碼復雜度蛾扇,更有效的傳達代碼意圖攘烛。任何一個優(yōu)秀的 iOS 程序員都不會拒絕響應式編程,唯一的缺點可能就是對智商有要求了镀首。

RAC 和 Rx 都有著廣泛的使用用戶坟漱。個人拙見兩個庫的選擇全靠個人偏好,在編程范式上沒有區(qū)別更哄。

ReactiveCocoa

OC 時代最流行的響應式框架芋齿。由 github 團隊開源。如果項目是從 OC 遷移到 swift 的成翩,繼續(xù)使用 RAC 是一個非常自然的選擇觅捆。因此 RAC 有著廣泛的社區(qū)支持。從 5.0 開始主要框架邏輯已經(jīng)全由 swift 實現(xiàn)麻敌。與 RxSwift 編程模型最大的區(qū)別是冷熱信號由兩種類型表示栅炒。

RxSwift

函數(shù)響應式編程 (Funtional Reactive Programming) 系列 ReactiveX 的 Swift 版本開源框架。推出時間較晚,其思路與 ReactiveCocoa 相近赢赊,它們的共同祖先是微軟的 ReactiveExtensions乙漓,本質核心就是面向數(shù)據(jù)流編程。

代碼分析

SwiftLint

Realm 出品的 Swift 代碼規(guī)范檢測工具释移。深度嵌入 Clang 和 SourceKit叭披,可以監(jiān)測整個項目的代碼風格。如果有不符合規(guī)范之處玩讳,SwiftLint會報出相應警告??涩蜘。當然為了方便和特殊情況,也可在相應代碼處手動關閉警告熏纯,或是在整個項目中關閉警告同诫,十分靈活。

代碼規(guī)范請參考:Swift Style Guide

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末豆巨,一起剝皮案震驚了整個濱河市剩辟,隨后出現(xiàn)的幾起案子掐场,更是在濱河造成了極大的恐慌往扔,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熊户,死亡現(xiàn)場離奇詭異萍膛,居然都是意外死亡,警方通過查閱死者的電腦和手機嚷堡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門蝗罗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蝌戒,你說我怎么就攤上這事串塑。” “怎么了北苟?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵桩匪,是天一觀的道長。 經(jīng)常有香客問我友鼻,道長傻昙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任彩扔,我火速辦了婚禮妆档,結果婚禮上,老公的妹妹穿的比我還像新娘虫碉。我一直安慰自己贾惦,他們只是感情好,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著纤虽,像睡著了一般乳绕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逼纸,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天洋措,我揣著相機與錄音,去河邊找鬼杰刽。 笑死菠发,一個胖子當著我的面吹牛,可吹牛的內容都是我干的贺嫂。 我是一名探鬼主播滓鸠,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼第喳!你這毒婦竟也來了糜俗?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤曲饱,失蹤者是張志新(化名)和其女友劉穎悠抹,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扩淀,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡楔敌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了驻谆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卵凑。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖胜臊,靈堂內的尸體忽然破棺而出勺卢,到底是詐尸還是另有隱情,我是刑警寧澤象对,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布黑忱,位于F島的核電站,受9級特大地震影響织盼,放射性物質發(fā)生泄漏杨何。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一沥邻、第九天 我趴在偏房一處隱蔽的房頂上張望危虱。 院中可真熱鬧,春花似錦唐全、人聲如沸埃跷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弥雹。三九已至垃帅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剪勿,已是汗流浹背贸诚。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留厕吉,地道東北人酱固。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像头朱,于是被迫代替她去往敵國和親运悲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內容

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫项钮、插件班眯、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,103評論 4 62
  • 今天小蕾在群里問了兩個問題,什么時候是你最美好的日子烁巫,你想象中最美好的生活是什么樣子的署隘。 關于第一個問題,我毫不猶...
    璃諾_Lee閱讀 341評論 0 0
  • 我路過日本的富士山 看見冰冷的山尖冒出紅色的火焰 我路過遙遠的天邊 看見斑駁的藍色上有零星幾點 我路過沒有草的草原...
    曉曉博士閱讀 135評論 0 2
  • 羞花已去程拭,覓無人應定踱,空閨尋棍潘,怎一個悲字了得恃鞋! 人去樓空涼徹骨,窗寒杯盡一人多亦歉。 敢問世間情何物恤浪,教人生死以相許。 ...
    果兒applegirl閱讀 1,492評論 0 1
  • 時間過得真快肴楷,一轉眼水由,親子班踐行已經(jīng)過了一個月了。這一個月赛蔫,是作為媽媽的我不斷察覺的一個月砂客。因為沒有帶寶貝一...
    我的隊伍向太陽閱讀 203評論 0 0