Swiftアプリ開発で使ってよかったライブラリまとめ


Swiftビギナーな自分が最近知った & 使ってよかったライブラリをまとめていきます
随時更新予定です:tada:

# UI
## [**SnapKit/SnapKit**](https://github.com/SnapKit/SnapKit)
コードで簡単にAutoLayoutが実装できます

すでにAutoLayoutを使用しているView上に、コードで`addSubview()`をするときなどに便利でした

```swift:Sample.swift
// viewにnewViewを追加
view.addSubview(newView)

// Superview（view）のTop、Bottom、Leading、Trailingに各margin0で制約を与える
newView.snp_makeConstraints { make -> Void in
    make.top.leading.trailing.bottom.equalTo(view)
}
```


## [**facebook/pop**](https://github.com/facebook/pop)
バウンスの動きなど、アニメーションの実装が簡単にできるライブラリ

:tada: TIPS: Objective-C製なので**要BridgingHeader**です

## [**devxoul/JLToast**](https://github.com/devxoul/JLToast)
Androidが羨ましかった！トースト表示のライブラリです
以下のようなAttributeも付与できて便利でした

|Attribute|
|---|
|JLToastViewBackgroundColorAttributeName|
|JLToastViewCornerRadiusAttributeName|
|JLToastViewTextInsetsAttributeName|
|JLToastViewTextColorAttributeName|
|JLToastViewFontAttributeName|
|JLToastViewPortraitOffsetYAttributeName|
|JLToastViewLandscapeOffsetYAttributeName|

:tada: TIPS: 現時点ではAttributeを一つずつ設定することしかできないようなので、Forkして同時に複数設定できるようにすると良いかもしれません（[**Sampleあります**](https://github.com/mafmoff/JLToast/blob/master/JLToast/JLToastView.swift#L217)）

# JSON / Model Mapping
## [**Hearst-DD/ObjectMapper**](https://github.com/Hearst-DD/ObjectMapper)
JSON形式のAPIのレスポンスやplistのマッピングに使っています

:tada: TIPS: Objective-Cでいうところの[Mantle/Mantle](https://github.com/Mantle/Mantle)

# Network
## [**Alamofire/Alamofire**](https://github.com/Alamofire/Alamofire)
ネットワーク通信用の定番ライブラリ

:tada: TIPS: Objective-Cでいうところの[AFNetworking/AFNetworking](https://github.com/AFNetworking/AFNetworking)

# Image Downloader
## [**onevcat/Kingfisher**](https://github.com/onevcat/Kingfisher)
画像のダウンロードとキャッシングのライブラリ
:tada: TIPS: [rs/SDWebImage](https://github.com/rs/SDWebImage)にもINSPIREされたようです！function名も似ていて使いやすさ◎

# Reactive Programing
## [**ReactiveX/RxSwift**](https://github.com/ReactiveX/RxSwift)

リアクティブプログラミングに利用します

:tada: TIPS: Objective-C製では[ReactiveCocoa/ReactiveCocoa](https://github.com/ReactiveCocoa/ReactiveCocoa)でしょうか
（Swift対応済みなのですね。leegunさんありがとうございます！）

前述の**Alamofire**や**ObjectMapper**と併用したネットワーク周りの実装に役立っています
また、値監視をしてMVVMモデルを実装したり、用途は様々でとても便利です

:tada: TIPS: [**RxSwift + MVVMモデルのサンプル**](http://qiita.com/mafmoff/items/4818c113f203db54c258)あります

# Data Base
## [**realm/realm-cocoa (RealmSwift)**](https://github.com/realm/realm-cocoa)
簡単にアプリ内でデータベースを実装できます
前述の**ObjectMapper**との併用も便利です

:tada: TIPS: [公式サイト](https://realm.io/jp/)やドキュメントも整備されているので◎

# Date
## [**malcommac/SwiftDate**](https://github.com/malcommac/SwiftDate)
NSDateの面倒な扱いがぐっと楽になっていて驚きました

Before：SwiftDateなし（いつもの）

```swift:WithoutSwiftDate.swift
// 現在日時を取得
let nowDate = NSDate()

// フォーマット指定（YYYY/MM/DD HH:MM:SS）
let formatter = NSDateFormatter()
formatter.dateFormat = "YYYY/MM/DD HH:MM:SS"

print("\(formatter.stringFromDate(nowDate))") // 2016/02/35 11:02:09
```

After：**SwiftDateあり**

```swift:WithSwiftDate.swift
// 現在日時を指定フォーマット（YYYY/MM/DD HH:MM:SS）で取得
let nowDate = NSDate().toString(DateFormat.Custom("YYYY/MM/DD HH:MM:SS"))
print("\(nowDate)") // 2016/02/35 11:02:09
```

こんなコードも簡単にできました

```
let date = 5.days.fromNow // 現在から5日後のNSDataオブジェクト
let date = 4.hours.ago // 現在から4時間前のNSDataオブジェクト
let date = (5.days + 2.hours - 15.minutes).fromNow // 計算もらくらく！
```

# Log
## [**DaveWoodCom/XCGLogger**](https://github.com/DaveWoodCom/XCGLogger)
ログ出力用ライブラリ

# おまけ
## ライブラリ選定のポイント

[cocoacontrols](https://www.cocoacontrols.com/)などで探すと、一見素敵なライブラリがたくさん見つかります
~~自戒を込めて、~~そんな中で良ライブラリと出会うために気をつけるべきことをまとめてみました

* **Starの数**
* **Forkの数**
* **Contributorsの数**
* **Issuesを見てみる**
    * バグ報告に対応しているか？
    * おかしい部分をフックしているか？
* **更新日時**
    * だいたい最終更新**2month**が目安
* **バージョンが1以上か？**
    * 1以下の場合、アプリのベースに関わる部分に使うのを避ける

以上です :tada: 
ありがとうございました