githubで見つけたSwiftの面白そうなライブラリたち

# githubで見つけたSwiftの面白そうなライブラリたち

期日過ぎていたところにすかさず投稿。
githubで見つけたSwiftの面白そうなライブラリを少しだけ紹介しようと思います。

なお、この記事で紹介するライブラリは、私はほぼ使ったことがありません。READMEみて「おっ、よさげだな」と思ったものをピックアップしただけとなります。

## Async
https://github.com/duemunk/Async

Grand Central Dispatch（GCD）のシンタックスシュガーライブラリです。ワーカースレッドの処理とメインスレッドの処理の切り替えを簡単に書くことができます。READMEにも書いてありますが、

```swift
Async.background {
    println("This is run on the background queue")
}.main {
    println("This is run on the main queue, after the previous block")
}
```

みたいな感じで書けます。
dispatch_queue_createで作ったカスタムキューに流し込んだり、dispatch_afterのように遅延実行させたりもできるっぽいです。

## SwiftDate
https://github.com/malcommac/SwiftDate

NSDateを使いやすくしたライブラリです。

```Swift
let dateInUTC = (2015.years | 12.months | 25.days | 20.hours | 10.minutes).inUTCRegion
```

こんな感じの書き方で日付のイニシャライズが可能です。他にも初期化の方法はいろいろ用意されています。日付を扱うようなアプリを作るのあれば入れてみると便利かもしれません。

## Money
https://github.com/danthorpe/Money

名前の通り、お金の管理をしやすくしちゃいました的なライブラリです。様々な国と地域の通過に対応しているそうです（もちろんJPYもあります）。

Apple Payに対応しているっぽいようなことが書いてありますが使ったことはないのでなんとも・・・。

## Genome
https://github.com/LoganWright/Genome

JSONデコードライブラリです。よく見るのはSwiftyJSON、ObjectMapper、Himotokiですが、Genomeもさらっと見た感じだと使いやすそうです。

BasicMappableプロトコルにマッピング対象の構造体を適合させて使います。

```swift
struct Pet {
      var name: String = ""
      var type: PetType!
      var nickname: String?
}

extension Pet : BasicMappable {
    mutating func sequence(map: Map) throws {
        try name <~> map["name"]
        try nickname <~> map["nickname"]
        try type <~> map["type"]
            .transformFromJson {
                return PetType(rawValue: $0)
            }
            .transformToJson {
                return $0.rawValue
            }
    }
}
```

StandardMappableを使えばイニシャライズでマッピング可能になるので、プロパティをletで宣言できるようになります。タイプセーフですね。

## Gloss
https://github.com/hkellaway/Gloss

またもや見つけてしまったJSONデコードライブラリ。Decodableに適合させて使います。

```swift
struct RepoOwner: Decodable {

    let ownerId: Int?
    let username: String?

    // MARK: - Deserialization

    init?(json: JSON) {
        self.ownerId = "id" <~~ json
        self.username = "login" <~~ json
    }

}
```

## Venice
https://github.com/Zewo/Venice

CSP(Communicating Sequential Processes)をお手軽に実装できるライブラリです。私が初めて見つけた時は「SwiftGo」という名前でGolangのGoルーチン的なものをSwiftで実装しやすくする感じのライブラリだったことを覚えています。

## SwiftCop
https://github.com/andresinaka/SwiftCop

バリデーションチェック用ライブラリです。
正規表現でのチェックはもちろん、文字列が含まれているか or そうでないか、メールアドレス形式か、文字列が指定の長さより短いか、など標準的なチェックは実装されています。

UIKitを使ったサンプルコードがREADMEに記載されているので、気になる方はチェック。

## Device
https://github.com/Ekhoo/Device

現在のデバイスの種類とスクリーンサイズを検知するツールライブラリです。

```swift
Device.version() 
```

と、クラスメソッドを実行するとデバイス種類のEnumが返却されます。

```swift
Device.size()
```

とするとデバイスの画面サイズ。

```swift
Device.type()
```

とするとデバイスのタイプ（iPad, iPhone, シミュレータなど）が取得できます。

## SwiftEventBus
https://github.com/cesarferreira/SwiftEventBus

AndroidのEventBusをiOSでも使えるようにしたよー的なやつ（だと思う）。
subscribe（購読）する側は

```swift
SwiftEventBus.onMainThread(target, name: "personFetchEvent") { result in
    let person : Person = result.object as Person
    println(person.name) // will output "john doe"
}
```

こんな感じで待っていて、

```swift
SwiftEventBus.post("personFetchEvent", sender: Person(name:"john doe"))
```

こんな感じでイベントを送る。

## おわり
力尽きたのでここまでにします。。。
最近、素晴らしいSwiftのライブラリが本当に増えてきて純粋に嬉しいです。
使う側が使用するライブラリを選べるって素晴らしいですね。

以上