如果你从事的是ios开发的工作,那么使用swift语言也许会是一个不错的选择,相较objective-c,swift更易学习也更加强大。不过,纵观swift教程,你会发现讲解的比较广泛,且并未深入涉及代码学习和实现等。这里,为了让大家能够进一步了解swift及让开发工作更容易上手,作者以自身的体验,从几百个项目中选出了这十个不错的开源项目,希望可以为ios开发者提供帮助。
1.
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是一个基于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
3.
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..
4.
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是一组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是使用swift语言编写的状态机,拥有许多和他人创建的业务工作流任务的用例,综合了promise progress pause cancel,使用swiftstate(状态机)。
代码示例:
基本定义
// define task
let task = task { (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.
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是用来声明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是一款适用于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是一个行为驱动的swift和objective-c开发测试框架,过。
代码示例:
使用的例子
// 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
#import
quickspecbegin(dolphinspec)
it(@"is friendly", ^{
expect(@([[dolphin new] isfriendly])).to(betruthy());
});
it(@"is smart", ^{
expect(@([[dolphin new] issmart])).to(betruthy());
});
quickspecend