2014-06-07 54 views
1

不工作我試圖讓我的XML解析器的索姆天氣數據的迅速版本:NSScanner scanString:intoString:在操場

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(搜索字符串,intoString:無) 「返回零?

回答

5

實際上,你的問題與Swift無關(相當於Objective-C的代碼的確如此) - 你只是使用NSScanner錯誤。從docsscanString:intoString:

返回值

是如果字符串在掃描位置的字符匹配的,否則就沒有。

基本上,無論是scanString:intoString:在當前位置發現searchString(在示例中,在開始時),或它返回false。由於您的字符串以"cdefg"而不是"<time"開頭,因此該方法返回false並且不會提前掃描位置。如果您從字符串中刪除"cdefg jajaja ",則您的scanString:intoString:呼叫將返回true並提前掃描位置,以便下一個字符爲">"。或者,您可以將scanString:intoString:呼叫更改爲scanUpToString:intoString:,以便在丟棄任何包括"<time"之前的內容。

+1

不幸的是,我以前沒有感謝你,但我會通知你,你解決了問題 – user3717718