摘要:相較Objective-C,Swift語言要更為簡單和強大。但縱觀Swift教程,會發現講解的比較廣泛,并未深入涉及代碼學習。為了讓大家的開發工作更易上手,作者從幾百個項目中選出十個不錯的開源項目,希望可為大家提供幫助。
如果你從事的是iOS開發的工作,那么使用Swift語言也許會是一個不錯的選擇,相較Objective-C,Swift更易學習也更加強大。不過,縱觀Swift教程,你會發現講解的比較廣泛,且并未深入涉及代碼學習和實現等。這里,為了讓大家能夠進一步了解Swift及讓開發工作更容易上手,作者以自身的體驗,從幾百個項目中選出了這十個不錯的開源項目,希望可以為iOS開發者提供幫助。
1. Alamofire
Alamofire是一個使用Swift語言編寫的HTTP網絡庫,支持各種 HTTP Method、JSON、文件上傳、文件下載和多種認證方法,可以很簡單的用于異步網絡通信和業務流程鏈反應。使用要求:iOS 7.0+/Mac OS X 10.9+、Xcode 6.0。
代碼示例:
響應處理
[cpp] view plaincopy
Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
.response { (request, response, data, error) in
println(request)
println(response)
println(error)
}
2. Surge
Surge是一個基于Accelerate框架和C語言開發,用于進行矩陣運算、數學信號處理和圖像處理的API。換句話說,就是可以非常快速的處理數學、語音和圖像信號。
代碼示例:
用法
計算總和[Double]
[js] view plaincopy
import Surge
let n = [1.0, 2.0, 3.0, 4.0, 5.0]
let sum = Surge.sum(n) // 15.0
計算乘積[Double]s
[js] view plaincopy
import Surge
let a = [1.0, 3.0, 5.0, 7.0]
let b = [2.0, 4.0, 6.0, 8.0]
let product = Surge.mul(a, b) // [2.0, 12.0, 30.0, 56.0]
3. SwiftyJSON
Swift對于類型有著非常嚴格的控制,所以在處理JSON時會很麻煩。而SwiftyJSON就是讓在Swift語言中處理JSON數據變得更簡單的開源類庫。使用要求:iOS 7.0+/Mac OS X 10.9+、Xcode 6.0。
代碼示例:
Loop
[cpp] view plaincopy
//If json is .Dictionary
for (key: String, subJson: JSON) in json {
//Do something you want
}
[js] view plaincopy
//If json is .Array
//The `index` is 0..<json.count's string value
for (index: String, subJson: JSON) in json {
//Do something you want
}
4. Dollar.swift
Dollar是一個Swift庫,無需擴展任何內置對象就為Swift語言提供有效的函數式編程輔助方法,類似于Lo-Dash或JavaScript中的Underscore。而Cent則是通過擴展功能來擴展Swift中的特定對象類型。
代碼示例:
Dollar示例:Array
[cpp] view plaincopy
$.at(["ant", "bat", "cat", "dog", "egg"], indexes: 0, 2, 4)
=> ["ant", "cat", "egg"]
Cent示例:Date
[cpp] view plaincopy
let date = Date.from(2014, 1, 1)
=> "Jan 1, 2014, 12:00 AM"
let parsedDate = Date.parse("2014-01-01", format: "yyyy-MM-dd")
=> "Jan 1, 2014, 12:00 AM"
let currentUnix = Date.unix()
=> 1,412,829,874.07114
var otherNSDate = Date()
let otherUnix = Date.unix(otherDate)
=> 1,412,829,938.92399
5. ExSwift
ExSwift是一組Swift語言對標準類型和類的擴展。
代碼示例:
迭代
[js] view plaincopy
each (eachFunction each: (Key, Value) -> ())
[js] view plaincopy
let dictionary = ["A": 1, "B": 2, "C": 3]
dictionary.each { key, value in println(key, value) }
/* Prints → */
// (A, 1)
// (B, 2)
// (C, 3)
6. SwiftTask
SwiftTask是使用Swift語言編寫的狀態機,擁有許多和他人創建的業務工作流任務的用例,綜合了Promise + progress + pause + cancel,使用SwiftState(狀態機)。
代碼示例:
基本定義
[js] view plaincopy
// define task
let task = Task<Float, String, NSError> { (progress, fulfill, reject, configure) in
player.doSomethingWithProgress({ (progressValue: Float) in
progress(progressValue) // optional
}, completion: { (value: NSData?, error: NSError?) in
if error == nil {
fulfill("OK")
}
else {
reject(error)
}
})
// pause/resume/cancel configuration (optional)
configure.pause = { [weak player] in
if let p = player { p.pause() }
}
configure.resume = { [weak player] in
if let p = player { p.resume() }
}
configure.cancel = { [weak player] in
if let p = player { p.cancel() }
}
}
// set then & catch
task.then { (value: String) -> Void in
// do something with fulfilled value
}.catch { (error: NSError?, isCancelled: Bool) -> Void in
// do something with rejected error
}
// you can call configured operations outside of Task-definition
task.pause()
task.resume()
task.cancel()
7. HanekeSwift
Haneke是一款使用Swift語言編寫的,輕量級的iOS通用緩存。它為UIImage、NSData、JSON和String提供記憶和LRU磁盤緩存或其他像數據可以讀取或寫入的任何其他類型。特別地是,Haneke更擅長處理圖像。使用要求:iOS 8.0+、Xcode 6.0。
代碼示例:
還可創建自己的緩存
[js] view plaincopy
let cache = Haneke.sharedDataCache
cache.set(value: data, key: "funny-games.mp4")
// Eventually...
cache.fetch(key: "funny-games.mp4").onSuccess { data in
// Do something with data
}
8. Cartography
Cartography是用來聲明Swift中的Auto Layout,無需輸入任何stringly就可設置自己Auto Layout的約束聲明。
代碼示例:
如何使用
[js] view plaincopy
layout(view1, view2) { view1, view2 in
view1.width == (view.superview!.width - 50) * 0.5
view2.width == view1.width - 50
view1.height == 40
view2.height == view1.height
view1.centerX == view.superview!.centerX
view2.centerX == view1.centerX
view1.top >= view.superview!.top + 20
view2.top == view1.bottom + 20
}
9. Sleipnir
Sleipnir是一款適用于Swift的BDD風格框架,不依賴NSObject,是純粹的Swift測試框架,不使用XCTest。同時,Sleipnir還具有很好的命令行輸出和支持自定義測試報告及隨機測試調用等特性。
代碼示例:
[cpp] view plaincopy
class SomeSpec : SleipnirSpec {
let someSpec : () = describe("Some spec") {
var someArray: [Int]?
beforeEach {
someArray = [1, 2, 3]
}
afterEach {
someArray = nil
}
it("should pass") {
expect(someArray).toNot(beNil())
expect(someArray).to(contain(3))
}
}
}
10. Quick
Quick是一個行為驅動的Swift和Objective-C開發測試框架,CSDN也有相關文章介紹過。
代碼示例:
使用的例子
[js] view plaincopy
// Swift
import Quick
import Nimble
class DolphinSpec: QuickSpec {
override func spec() {
it("is friendly") {
expect(Dolphin().isFriendly).to(beTruthy())
}
it("is smart") {
expect(Dolphin().isSmart).to(beTruthy())
}
}
}
[js] view plaincopy
// Objective-C
#import <Quick/Quick.h>
#import <Nimble/Nimble.h>
QuickSpecBegin(DolphinSpec)
it(@"is friendly", ^{
expect(@([[Dolphin new] isFriendly])).to(beTruthy());
});
it(@"is smart", ^{
expect(@([[Dolphin new] isSmart])).to(beTruthy());
});
QuickSpecEnd
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。