swift で FSEvents をシュッと扱う

swift だけで書いてみたかったので書いてみた

github.com

import FileWatch

let filewatch = try! FileWatch(paths: ["/path/to/dir"],  createFlag: [.UseCFTypes, .FileEvents], runLoop: NSRunLoop.currentRunLoop(), latency: 3.0, eventHandler: { event in
    if event.flag.contains(.ItemIsFile) {
      debugPrint(event.path)
    }
})

こういう感じで使う。

FSEvents 周り全く swift で扱いやすくなってないので初期化と、受け取ったイベントの flag 周りを OptionSetType で扱えるようにした。 FSEventStreamCreate には コールバックの関数を渡す必要があるが Swift - Proper use of CFNotificationCenterAddObserver w/callback - Stack Overflow にあるように、クロージャとかにする必要があある様子。