1. Alamofire
앱에 네트워킹을 위한 기능을 간단히 추가하고 싶을때, Alamfire 는 안성마춤이다.Alamofire 는 HTTP 네트워킹 라이브러리이고 NSURLSession 과 Foundation URL 로딩 시스템에 기반해서 만들어졌다. 우아하고 간단한 스위프트 인터페이스로 네트워킹 메카니즘을 깔끔하게 감쌌다.
// Making a GET request
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
.responseJSON { response in
print(response.request) // original URL request
print(response.response) // URL response
print(response.data) // server data
print(response.result) // result of response serialization
if let JSON = response.result.value {
print("JSON: \(JSON)")
}
}
2. SwiftyJSON
Swift의 명시적 유형은 코드로 인한 실수를 저지르지 않게 도와주어 버그가 발생하지 않도록 합니다. 그러나 때로는 JSON을 사용하여 작업 할 때 특히 문제가 될 수 있습니다. 다행스럽게도 SwiftyJSON은 Swift의 JSON 데이터를 보다 읽기 쉬운 방식으로 처리하는 데 도움이됩니다. 선택적 언 래핑은 자동으로 처리됩니다!
// Typical JSON handling
if let statusesArray = try? NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) as? [[String: AnyObject]],
let user = statusesArray[0]["user"] as? [String: AnyObject],
let username = user["name"] as? String {
// Finally we got the username
}
// With SwiftyJSON
let json = JSON(data: dataFromNetworking)
if let userName = json[0]["user"]["name"].string {
//Now you got your value
}
SwiftyJSON 는 Alamofire 와 함께 할 때 빛이 나죠.
Alamofire.request(.GET, url).validate().responseJSON { response in
switch response.result {
case .Success:
if let value = response.result.value {
let json = JSON(value)
print("JSON: \(json)")
}
case .Failure(let error):
print(error)
}
}
3. ObjectMapper
API를 통해 정보를 다운로드하는 앱을 작성한 적이 있다면 아마도 응답을 객체에 매핑하는 코드를 작성하는 데 많은 시간을 할애했을 것입니다. ObjectMapper를 사용하면 JSON 응답을 모델 객체로 변환하거나 그 반대로 변환 할 수 있습니다. 즉, JSON을 객체에 매핑하고 객체를 JSON에 매핑하는 데 도움이됩니다. 중첩 된 객체도 지원됩니다.
// Temperature class that conforms to Mappable protocol
struct Temperature: Mappable {
var celsius: Double?
var fahrenheit: Double?
init?(_ map: Map) {
}
mutating func mapping(map: Map) {
celsius <- map["celsius"]
fahrenheit <- map["fahrenheit"]
}
}
또한 ObjectMapper를 사용할 때 JSON 응답 데이터를 Swift 객체로 변환하는 AlamofireObjectMapper라는 Alamofire 확장 기능에 대해서도 언급 할 가치가 있습니다.
4. Quick
Quick는 RSpec, Specta 및 Ginkgo에서 영감을 얻은 Swift의 행동 중심 개발 프레임 워크입니다. Quick는 Nimble과 함께 제공됩니다. Nimble은 테스트를 위한 matcher 프레임 워크입니다.
// Documentation directory spec
class TableOfContentsSpec: QuickSpec {
override func spec() {
describe("the 'Documentation' directory") {
it("has everything you need to get started") {
let sections = Directory("Documentation").sections
expect(sections).to(contain("Organized Tests with Quick Examples and Example Groups"))
expect(sections).to(contain("Installing Quick"))
}
context("if it doesn't have what you're looking for") {
it("needs to be updated") {
let you = You(awesome: true)
expect{you.submittedAnIssue}.toEventually(beTruthy())
}
}
}
}
}
5. Eureka
Eureka는 간단하고 우아한 방식으로 동적 테이블 뷰 형식을 작성할 수 있도록 도와줍니다. 그것은 행, 섹션 및 양식으로 구성됩니다. 앱에 많은 양식이 포함되어있는 경우, 유레카 (Eureka)는 실시간 보호 기능을 입증합니다.
// Creating a form
class CustomCellsController : FormViewController {
override func viewDidLoad() {
super.viewDidLoad()
form +++ Section("Custom cells")
<<< WeekDayRow(){
$0.value = [.Monday, .Wednesday, .Friday]
}
<<< TextFloatLabelRow() {
$0.title = "Float Label Row, type something to see.."
}
}
}
6. RxSwift
RxSwift는 Functional Reactive Programming을위한 신속한 프레임 워크입니다. 보다 구체적으로, RxSwift는 Rx의 신속한 버전이며 목표는 비동기 작업과 이벤트 / 데이터 스트림을 쉽게 구성 할 수있게하는 것입니다. KVO 관찰, 비동기 작업 및 델리게이트는 모두 시퀀스 추상화로 통일되어 RxSwift를 강력한 프레임 워크로 만듭니다. ReactiveCocoa를 사용해 본 경험이 있다면 그 개념을 잘 알고있을 것입니다.
// Combine first and last name sequences, and bind the resulting string to label
combineLatest(firstName.rx_text, lastName.rx_text) { $0 + " " + $1 }
.map { "Greeting \($0)" }
.bindTo(greetingLabel.rx_text)
7. SnapKit
SnapKit은 가독성을 잃지 않으면 서 최소한의 코드만으로 자동 레이아웃을 코드에 작성하는 것을 단순화하는 자동 레이아웃 라이브러리입니다. 사용자 인터페이스를 코딩하는 동안 프로그래밍 오류를 피할 수 있도록 설계된 유형 안전타입입니다.
// Resizing and centering subview in its superview
let box = UIView()
let container = UIView()
container.addSubview(box)
box.snp_makeConstraints { (make) -> Void in
make.size.equalTo(50)
make.center.equalTo(container)
}
8. Spring
Spring은 코드에서 또는 스토리 보드에서 직접 애니메이션을 생성하는 데 도움이되는 애니메이션 라이브러리입니다. 런타임 속성을 사용하여 스토리 보드에서 애니메이션을 만들 수 있습니다 (IBInspectable 속성을 통해 설정). Spring은 많은 이미 작성된 애니메이션, 전환 및 속성을 지원하는 완전히 개발 된 애니메이션 라이브러리로 성장했습니다.
// Usage with code
layer.animation = "wobble"
layer.animate()
9. Kingfisher
Kingfisher는 웹에서 이미지를 다운로드하고 캐시하기위한 경량 라이브러리입니다. 다운로드 및 캐싱은 비동기 적으로 수행됩니다. 다운로드 한 이미지는 메모리와 디스크 모두에 캐시되므로 앱 환경이 상당히 향상 될 수 있습니다.
// Basic example of downloading and caching an image
imageView.kf_setImageWithURL(NSURL(string: "http://your_image_url.png")!)
10. CoreStore
CoreStore는 Core Data의 래퍼 라이브러리입니다. 그 목표는 핵심 데이터와 상호 작용할 때 유형 안전성과 Swift의 우아함을 제공하는 것입니다. CoreStore의 API는 데이터베이스와 효과적으로 상호 작용하는 모든 일반적인 방법을 제공합니다.
// Storing a person entity
CoreStore.beginAsynchronous { (transaction) -> Void in
let person = transaction.create(Into(MyPersonEntity))
person.name = "John Smith"
person.age = 42
transaction.commit { (result) -> Void in
switch result {
case .Success(let hasChanges): print("success!")
case .Failure(let error): print(error)
}
}
}