NSScanner scanString:intoString:不在游乐场工作

时间:2014-06-07 11:59:11

标签: swift swift-playground

我正在尝试为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?

1 个答案:

答案 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"之前简单地丢弃任何内容。