SwiftでTwitter Streaming APIをparseするのに便利なNSData分割読み込みライブラリ
Twitter Streaming APIはCRLF区切りでJSONを送ってくるのですが、これを都度Stringに変換しcomponentsSeparatedByStringで配列にし、最後の手前まではNSDataに戻してJSONに、最後の要素はバッファに詰めて次回処理で先頭にくっつける...というのがいかにもパフォーマンス上よろしくなさそうなので、NSDataからデータを変換せずにある区切り毎にデータを読めるライブラリを書きました。
以前のコードと比較すると7倍弱高速化されました、パフォーマンスを体感することはないでしょうが消費電力が下がるという見方もできます。
また、コードの可読性も高まりました。
import Foundation import MutableDataScanner import SwiftyJSON class TwitterAPIStreamingRequest: NSObject, NSURLSessionDataDelegate { let scanner = MutableDataScanner(delimiter: "\r\n") // ... func connection(connection: NSURLConnection, didReceiveData data: NSData) { self.scanner.appendData(data) while let data = self.scanner.nextLine() { if data.length > 0 { let json = JSON(data: data) } } } }
github.com
※Swift 2以降のみ対応です