【问题标题】:Does NSScanner work with Swift Strings?NSScanner 是否适用于 Swift 字符串?
【发布时间】:2014-08-05 02:58:21
【问题描述】:

我想知道为什么会这样(注意我使用的是 NSString 类型):

    let stringToSearch:NSString = "I want to make a cake and then prepare coffee"
    let searchTerm:NSString = "cake"
    let scanner = NSScanner(string: stringToSearch)
    var result:NSString? = nil
    scanner.scanUpToString(searchTerm, intoString:&result)
    println(result) // correctly outputs "I want to make a"

但是如果我尝试使用“String”类型而不是“NSString”,这将无法编译:

    let altStringToSearch:String = "I want to make a cake and then prepare coffee"
    let altSearchTerm:String = "cake"
    let altScanner = NSScanner(string: altStringToSearch)
    var altResult:String? = nil
    altScanner.scanUpToString(altSearchTerm, intoString:&altResult)
    println(result)

错误提示“无法将表达式的类型 'BOOL' 转换为类型 'inout String?'在 scanUpToString 行上。我不确定它指的是什么 BOOL。

那么,NSScanner 是否不适用于 Swift 字符串类型?有没有我应该使用的新命令?

【问题讨论】:

    标签: nsstring swift ios8 xcode6 nsscanner


    【解决方案1】:

    scanUpToString 方法的第二个参数必须是指向NSString 的指针。其他参数可以是String。此代码将起作用:

    let altStringToSearch:String = "I want to make a cake and then prepare coffee"
    let altSearchTerm:String = "cake"
    let altScanner = NSScanner(string: altStringToSearch)
    var altResult:NSString?
    altScanner.scanUpToString(altSearchTerm, intoString:&altResult) // altResult : "I want to make a "
    

    【讨论】:

    • 那么,出于好奇,这有意义吗?即使 Swift 投入生产,你是否认为它会保持这种状态?对我来说似乎很奇怪,任何类型的字符串函数都无法输出 Swift String 类型。
    • @Narwhal 这很有意义,因为这些库都在 OBJC 中,并被视为遗产。与传统的互操作总是丑陋、奇怪和困难的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    相关资源
    最近更新 更多