学个痛快!十款不容错过的Swift iOS开源项目

更新时间:2014-10-17 12:04:59 点击次数:2283次

摘要:相较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  

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

回到顶部
嘿,我来帮您!