1

我正在尝试为 som 天气数据制作我的 xml 解析器的快速版本:

import Cocoa
import Foundation

let string2: NSString? = "cdefg jajaja <time> bbb"

let scanner = NSScanner(string: string2)
scanner.string
let searchString:NSString? = "<time"
var result: NSString?  = nil //= AutoreleasingUnsafePointer<NSString?>

scanner.charactersToBeSkipped = nil
scanner.scanString(searchString, intoString: nil) // this is not working (false)

scanner.scanUpToString( ">", intoString: &result) // this is working

result // result = "cdefg jajaja <time"

为什么“scanner.scanString(searchString, intoString: nil)”返回零?

4

1 回答 1

6

实际上,您的问题与 Swift 无关(等效的 Objective-C 代码也是如此)——您只是使用NSScanner错误。从文档scanString:intoString:

返回值

如果字符串与扫描位置的字符匹配,则为 YES,否则为 NO。

基本上,scanString:intoString:要么searchString在当前位置找到(在您的示例中,在开始处),要么返回false. 由于您的 String 以 开头"cdefg"而不以开头"<time",因此该方法返回false并且不推进扫描位置。如果您"cdefg jajaja "从字符串中删除,您的scanString:intoString:调用将返回true并推进扫描位置,以便下一个字符是">". 或者,您可以将scanString:intoString:调用更改scanUpToString:intoString:为简单地丢弃之前和包括"<time".

于 2014-06-07T12:43:46.100 回答