MutableDataScanner 1.1.0

MutableDataScanner 1.1.0

测试测试
语言语言 SwiftSwift
许可证 MIT
发布日期最后发布日期2016年11月
SwiftSwift 版本3.0
SPM支持 SPM

Shinichiro Aska 维护。



MutableDataScanner

Build Status

一个简化的文本扫描器,可以使用分隔符解析 NSMutableData。

因为它不需要进行 NSData 与 String 之间的转换,所以速度更快。

它可以轻松且可靠地解析 Twitter 流 API 和其他流。

性能

测试: https://github.com/s-aska/MutableDataScanner/blob/master/MutableDataScannerTests/MutableDataScannerTests.swift

  • MutableDataScanner 特定分隔符 … 平均: 0.071
  • MutableDataScanner 行分隔符(CRLF 或 LF) … 平均: 0.092
  • String#componentsSeparatedByString … 平均: 0.304

使用方法

用于 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

CRLF 或 LF

  • 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)

需求

  • iOS 8.0+ / Mac OS X 10.10+
  • Xcode 8+ / Swift 3+

许可协议

MutableDataScanner是在MIT许可下发布的。详细信息请参阅LICENSE。