有人能解释一下,为什么扫描仪会停在"扫描1〃;(请参阅代码(,但默认情况下。charactersToBeSkipped设置为.whitesespaceAndNewlines?看起来我没有获取跳过字符的概念。
扫描2-4只是测试用例。Xcode 11/Swift 4
游乐场:
let hexCs = CharacterSet(charactersIn: "1234567890abcdefABCDEF")
let hexWhiteCs = CharacterSet().union(hexCs).union(.whitespacesAndNewlines)
let ascii = "<19 19 19 19>"
let scanner = Scanner(string:ascii)
_ = scanner.scanString("<")
let reset = scanner.currentIndex
/// Scan 1:
var result = scanner.scanCharacters(from: hexCs) // "19"
/// Scan 2:
scanner.charactersToBeSkipped = nil
scanner.currentIndex = reset
result = scanner.scanCharacters(from: hexCs) // "19"
/// Scan 3:
scanner.currentIndex = reset
result = scanner.scanCharacters(from: hexWhiteCs) // "19 19 19 19"
/// Scan 4:
scanner.charactersToBeSkipped = .whitespacesAndNewlines
scanner.currentIndex = reset
result = scanner.scanCharacters(from: hexWhiteCs) // "19 19 19 19"
let expected = result!.filter { !CharacterSet.whitespacesAndNewlines.contains($0.unicodeScalars.first!) } // "19191919"
文档可以:
在扫描程序检查目标之前,将跳过要跳过的字符。例如,如果扫描仪忽略空格,而您向它发送
scanInt:
消息,它会跳过空格,直到找到十进制数字或其他字符扫描元素时,不会跳过任何字符。