file_pathの扱いを楽にするFilePathConvertibleを作った

Wednesday, March 9, 2016

最近 try! RxSwiftしてとことんクラッシュしています。どうもです。
そろそろ、ストアに出すかどうかは一旦置いといて、真面目に自作アプリを作ろうと決心し、
使いたかったライブラリを使ってテストプロジェクトで遊び、何のライブラリを使うか決めて動き出しました。

その中で、EZSwiftExtensionsみたいに、ある程度使いやすい単位でまとめたextensionとかをまとめたライブラリを作ろうということで、SUSwiftSugarの整備をしています。
その時に、file_path を扱う時に、StringでもNSURLでも許容できるものをと思って、FilePathConvertibleを作ってみました。

これで、 NSURLfile_pathString へ、 Stringfile_pathNSURL へと変換して使うことができます。
変換できることを前提にしているので、できない場合はクラッシュします
これで、例えば以下のような Extension を用意したときに、一々 String?NSURL? を気にせずに使うことができます。

public extension NSFileManager {
    public func fileExists(at path: FilePathConvertible) -> Bool {
        return fileExistsAtPath(path.filePath)
    }
}

NSFileManager.defaultManager().fileExists("file/to/path") // String
NSFileManager.defaultManager().fileExists(fileURL) // NSURL

最大の利点は、NSURLとStringでそれぞれ関数を用意したり、使う時に変換を考えなくて済むことです。
執筆段階でまだSUSwiftSugarには実装が進んでいないですが、FilePathConvertibleを実装して、NSFileManager周りを楽にスッキリと扱えるようにextensionを準備していく予定です。
元ネタというか、似たようなものに、URLConvertibleなるものがあります。KageeAlamofireなどでも使われている手法で、 String でも NSURL でも、 url を同様に扱うことができる、といったものです。

techSwiftTips

UIScrollViewで常にBouncesを有効にする

NSLocaleにextensionを追加してtypoを防ぐ