我正在尝试为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)”返回nil?
答案 0 :(得分:5)
实际上,你的问题与Swift无关(等效的Objective-C代码也是如此) - 你只是使用NSScanner
错误。来自scanString:intoString:
的{{3}}
返回值
如果字符串与扫描位置处的字符匹配,则为YES,否则为NO。
基本上,scanString:intoString:
会在当前位置(在您的示例中,在开头)找到searchString
,或者返回false
。由于您的字符串以"cdefg"
而不是"<time"
开头,因此该方法会返回false
并且不会提升扫描位置。如果您从字符串中删除"cdefg jajaja "
,则scanString:intoString:
来电将返回true
并提前扫描位置,以便下一个字符为">"
。或者,您可以将scanString:intoString:
来电更改为scanUpToString:intoString:
,以便在"<time"
之前简单地丢弃任何内容。