测试测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布日期最后发布日期 | 2016年11月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Shinichiro Aska 维护。
一个简化的文本扫描器,可以使用分隔符解析 NSMutableData。
因为它不需要进行 NSData 与 String 之间的转换,所以速度更快。
它可以轻松且可靠地解析 Twitter 流 API 和其他流。
有关从流 API 接收到的解析响应的信息,请参阅 处理流数据。
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.next() {
if data.length > 0 {
let json = JSON(data: data)
}
}
}
}
read(length: Int) -> NSData?
let data = "0123456789abcdefghijklmnopqrstuvwxyz".dataUsingEncoding(NSUTF8StringEncoding)!
let scanner = MutableDataScanner(data: data)
scanner.read(length: 10) // => 0123456789
scanner.read(length: 10) // => abcdefghij
scanner.read(length: 10) // => klmnopqrst
scanner.read(length: 10) // => uvwxyz
scanner.read(length: 10) // => (nil)
read(offset: Int, length: Int) -> NSData?
let data = "0123456789abcdefghijklmnopqrstuvwxyz".dataUsingEncoding(NSUTF8StringEncoding)!
let scanner = MutableDataScanner(data: data)
scanner.read(offset: 5, length: 5) // => 56789
scanner.read(offset: 5, length: 5) // => fghij
scanner.read(offset: 5, length: 5) // => pqrst
scanner.read(offset: 5, length: 5) // => z
scanner.read(offset: 5, length: 5) // => (nil)
init(data: NSMutableData = default, delimiter: NSData)
init(data: NSMutableData = default, delimiter: String)
next() -> NSData?
hasNext() -> Bool
let data = "0123456789\nabcdefghijklmnopqrstuvwxyz\n0123".dataUsingEncoding(NSUTF8StringEncoding)!
let scanner = MutableDataScanner(data: data, delimiter: "\n")
scanner.data // => 0123456789\nabcdefghijklmnopqrstuvwxyz\n0123
scanner.hasNext() // => true
scanner.next() // => 0123456789
scanner.data // => abcdefghijklmnopqrstuvwxyz\n0123
scanner.hasNext() // => true
scanner.next() // => abcdefghijklmnopqrstuvwxyz
scanner.data // => 0123
scanner.hasNext() // => false
scanner.next() // => (nil)
next(delimiter: NSData) -> NSData?
hasNext(delimiter: NSData) -> Bool
next(delimiter: String) -> NSData?
hasNext(delimiter: String) -> Bool
let data = "0123456789\nabcdefghijklmnopqrstuvwxyz\n0123".dataUsingEncoding(NSUTF8StringEncoding)!
let scanner = MutableDataScanner(data: data)
scanner.data // => 0123456789\nabcdefghijklmnopqrstuvwxyz\n0123
scanner.hasNext("\r\n") // => false
scanner.hasNext("\n") // => true
scanner.next("\r\n") // => (nil)
scanner.next("\n") // => 0123456789
scanner.data // => abcdefghijklmnopqrstuvwxyz\n0123
nextLine() -> NSData?
hasNextLine -> Bool
let data = "0123456789\r\nabcdefghijklmnopqrstuvwxyz\n0123".dataUsingEncoding(NSUTF8StringEncoding)!
let scanner = MutableDataScanner(data: data)
scanner.data // => 0123456789\r\nabcdefghijklmnopqrstuvwxyz\n0123
scanner.hasNextLine() // => true
scanner.nextLine() // => 0123456789
scanner.data // => abcdefghijklmnopqrstuvwxyz\n0123
scanner.hasNextLine() // => true
scanner.nextLine() // => abcdefghijklmnopqrstuvwxyz
scanner.data // => 0123
scanner.hasNextLine() // => false
scanner.nextLine() // => (nil)
MutableDataScanner是在MIT许可下发布的。详细信息请参阅LICENSE。