Swift 的 Scanner .charactersToBeSkipped 是如何工作的?



有人能解释一下,为什么扫描仪会停在"扫描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:消息,它会跳过空格,直到找到十进制数字或其他字符扫描元素时,不会跳过任何字符

最新更新