原文链接 http://m.csdn.net/article/2014-10-14/2822083-swift-ios-open-source-projects
1. Alamofire
Alamofire是一个使用Swift语言编写的HTTP网络库,支持各种 HTTP Method、JSON、文件上传、文件下载和多种认证方法,可以很简单的用于异步网络通信和业务流程链反应。使用要求:iOS 7.0+/Mac OS X 10.9+、Xcode 6.0。
代码示例:
响应处理
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]
import Surge let n = [1.0, 2.0, 3.0, 4.0, 5.0] let sum = Surge.sum(n) // 15.0计算乘积[Double]s
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
//If json is .Dictionary
for (key: String, subJson: JSON) in json {
//Do something you want
}
//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
$.at(["ant", "bat", "cat", "dog", "egg"], indexes: 0, 2, 4)
=> ["ant", "cat", "egg"]
Cent示例:Date
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语言对标准类型和类的扩展。
代码示例:
迭代
each (eachFunction each: (Key, Value) -> ())
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(状态机)。
代码示例:
基本定义
// 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。
代码示例:
还可创建自己的缓存
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的约束声明。
代码示例:
如何使用
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还具有很好的命令行输出和支持自定义测试报告及随机测试调用等特性。
代码示例:
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也有相关文章介绍过。
代码示例:
使用的例子
// 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()) } } }
// 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