SwiftMarch

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

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

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

網絡

Alamofire

Swift 中使用最廣泛的網絡庫。由大神 matt 負責,值得信賴。可以看介紹:全身心擁抱開源的開發者 Mattt Thompson。需要提醒的是 4.1.0 的版本支持 iOS 8 , 4.0 的版本只支持 iOS 9 。

JSON 解析

SwiftyJSON

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

ObjectMapper

JSON 解析是 iOS 開發中再常見不過的了,也許你只聽過上面星星很多的 SwiftyJSON,但是我相信你用過 ObjectMapper 后一定會喜歡上它的。首先 ObjectMapper 使用起來非常簡潔,配合 JSON Export 使用,你完全不需要在嵌套的 JSON 數據里摸不著北,它還支持結構體和自定義轉換。同時,ObjectMapper 還遵守面向協議編程的范式,你的 Model 只需要實現 Mappable 協議就可以了,這會讓你的代碼更 Swifty。如果你想讓你的 Model 看起來既優雅又清爽,那么我建議你一定要試一試這個庫。

這是 ObjectMapper 的中文文檔翻譯

存儲

YYCache

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

具體設計介紹參考作者寫的:YYCache 設計思路與技術細節

Realm

Realm 是由硅谷創業公司發布的一款可以用于 iOS 和 Android 的跨平臺移動數據庫。支持的平臺包括 Java,Objective-C,Swift,React Native,Xamarin。是第一個專門針對移動平臺的數據庫,立志取代 SQLite 、CoreData。核心數據引擎由 C++ 開發,有著優異的性能。簡單易用可以快速上手,在數據存儲時再也不用思考煩人的底層技術細節。

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

  • Realm 沒有自動增長屬性

    Realm 沒有線程/進程安全的自動增長屬性機制,這在其他數據庫中常常用來產生主鍵

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

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

  • 不能自定義 getter、setter

    realm會自動生成 getter、setter ,如果自定義 getter 、setter 存儲就會有影響。如果要規避這個問題,可以通過設置這個對象的忽略屬性。

  • 查詢的結果不是數組

    為了能夠支持查詢結果的鏈式查詢,realm 自定義了一個集合類型。可以枚舉,但是不是熟悉的數組了。又因為realm的懶加載機制,所以不建議在數據層把這個枚舉轉成數組類型。這樣的缺點就是上層知道了數據的存儲邏輯。嚴格的說這里不應該讓上層知道。但是這樣設計也許是為了方便上層進行再次檢索,realm有著優越的查詢性能。

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

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

關于 Realm 的基本情況介紹,可以看這篇文章:移動端數據庫新王者:realm

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

更多的具體分析,請前往Realm數據庫 從入門到“放棄”

圖片存儲

Kingfisher

Kingfisher 是 Swift 中使用比較廣泛的圖片存儲庫。由喵神 onevcat 開源及維護。 Kingfisher 輕量級,純 Swift 編寫,目的是為了解決從網絡上下載圖片和緩存圖片的問題。Kingfisher 的靈感主要來源于 SDWebImage,采用的存儲機制和 SDWebImage一樣,所以性能上沒有太大區別,然而卻有著更加靈活友好的 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 就是最好的第三方庫。完整的提供了底層的能力。創造性的引入鏈式編程,讓使用起來非常的方便。

UI

Reusable

UITableView 必備。更加優雅的實現 Cell 的 Register 和 Reuse 。使用參考:Reusable-讓你放肆的dequeueReusableCell

Util

SwiftDate

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

MonkeyKing

MonkeyKing 幫助開發者快速集成國內主流社交應用(微信、微博、QQ、支付寶)的分享、授權、支付等功能。重要的是,不需要集成各種官方 SDK。目前由 4 名程序員維護。可用于生產環境、輕量級,能滿足絕大部分的分享、授權、支付等需求。

EZSwiftExtensions

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

R.swift

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

SwiftyAttributes

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

加密

CryptoSwift

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

KeychainAccess

輕量級 Keychain 封裝,簡單到極致的接口。支持 TouchID 與 Keychain 整合,詳細、優雅、簡明的 README。Objective-C 版本在這里

Debug

XCGLogger

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

CocoaLumberjack

OC 時代最好用的記錄日志的開源庫。現在同時有 OC 版和 swift 版本提供。

自動化

Fastlane

iOS 中最好用的自動化工具。提供了獲取證書、運行自動化測試、上傳至 TestFlight 和 AppStore 等功能。配置簡單,社區強大,具體的功能可以到這個網站查看:fastlane.tools

Functional Reactive Programming

使用響應式編程框架統一對委托、回調 blocks 、通知 、控件的事件 、KVO 等異步事件的邏輯處理。可以顯著的降低代碼復雜度,更有效的傳達代碼意圖。任何一個優秀的 iOS 程序員都不會拒絕響應式編程,唯一的缺點可能就是對智商有要求了。

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

ReactiveCocoa

OC 時代最流行的響應式框架。由 github 團隊開源。如果項目是從 OC 遷移到 swift 的,繼續使用 RAC 是一個非常自然的選擇。因此 RAC 有著廣泛的社區支持。從 5.0 開始主要框架邏輯已經全由 swift 實現。與 RxSwift 編程模型最大的區別是冷熱信號由兩種類型表示。

RxSwift

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

代碼分析

SwiftLint

Realm 出品的 Swift 代碼規范檢測工具。深度嵌入 Clang 和 SourceKit,可以監測整個項目的代碼風格。如果有不符合規范之處,SwiftLint會報出相應警告??。當然為了方便和特殊情況,也可在相應代碼處手動關閉警告,或是在整個項目中關閉警告,十分靈活。

代碼規范請參考:Swift Style Guide

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,151評論 4 61
  • 今天小蕾在群里問了兩個問題,什么時候是你最美好的日子,你想象中最美好的生活是什么樣子的。 關于第一個問題,我毫不猶...
    璃諾_Lee閱讀 348評論 0 0
  • 我路過日本的富士山 看見冰冷的山尖冒出紅色的火焰 我路過遙遠的天邊 看見斑駁的藍色上有零星幾點 我路過沒有草的草原...
    曉曉博士閱讀 138評論 0 2
  • 羞花已去,覓無人應,空閨尋,怎一個悲字了得! 人去樓空涼徹骨,窗寒杯盡一人多。 敢問世間情何物,教人生死以相許。 ...
    果兒applegirl閱讀 1,501評論 0 1
  • 時間過得真快,一轉眼,親子班踐行已經過了一個月了。這一個月,是作為媽媽的我不斷察覺的一個月。因為沒有帶寶貝一...
    我的隊伍向太陽閱讀 209評論 0 0