【问题标题】:NSScanner scanString: intoString: not working in playgroundNSScanner scanString: intoString: 不在操场上工作
【发布时间】:2014-06-07 11:59:10
【问题描述】:

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

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?

【问题讨论】:

    标签: swift swift-playground


    【解决方案1】:

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

    返回值

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

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

    【讨论】:

    • 很遗憾我之前没有感谢您,但我会通知您您解决了问题
    猜你喜欢
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    相关资源
    最近更新 更多