[Week 2] Functional Swiftを読む その1で、CIImageの例を参考に書いたString用のFilterがわりと題材としてよさそうだったので、ライブラリ化してみました。 今までCocoaPods用のものはいくつか公開したことがありましたが、今回初めてCarthage対応のフレームワークとして作りました。 

https://github.com/tnantoka/StringFilter

使い方

import StringFilter

let message = "ifmmp-!xpsme"
let filters = [ 
    StringFilter.Shift(-1),
    .Capitalize,
    .Replace("$", "!")
]
print(message.str_filter(filters)) // "Hello, World!"

このような感じで使えます。 ビルトインのフィルターがまだしょぼいですが、独自フィルターも定義可能です。

また、独自演算子があまり好きではない1ので、複数フィルターの掛けあわせは*で行うようにしました。

Carthage

Carthage対応のフレームワークは以下の様な手順で作成しました。

プロジェクトの作成

  1. File -> New -> Project
  2. iOS -> Framework & Library -> Cocoa Touch Framework -> Next
    ✔ Include Unit Tests
  3. Edit Scheme -> Test ->
    ✔ Gather coverage data
    ✔ Shared

これで、Command + Uでテストできてカバレッジも取れる状態です。

Carthageのインストール

$ brew update
$ brew install carthage
$ carthage version
0.11.0

公開前のテスト

$ git tag 0.0.1などをした状態で、

# Cartfile
git "file://path/to/framework"

と書けばローカルからインストールできました。(相対パスや~は使えませんでした) タグ打ち直した後、$ carthage updateすれば普通に更新もできました。

Travis CI

以下のように書いたら動きました。

https://github.com/tnantoka/StringFilter/blob/master/.travis.yml

参考

だいぶSwiftっぽく書けるようになってきたかな、と思います。 そろそろ何かアプリを作ろうかと考え中です。

  1. 他の言語にある演算子を移植するのは特に抵抗無いです。