Работает ли NSScanner со строками Swift?

Мне было интересно, почему это работает (обратите внимание, что я использую типы 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 String? Есть ли новая команда, которую я должен использовать вместо этого?


person Narwhal    schedule 14.06.2014    source источник


Ответы (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 "
person Adam    schedule 14.06.2014
comment
Итак, из любопытства, есть ли в этом смысл? Ожидаете ли вы, что так будет и после того, как Swift пойдет в производство? Мне кажется странным, что строковая функция любого вида не сможет вывести тип Swift String. - person Narwhal; 15.06.2014
comment
@Narwhal Это имеет смысл, потому что все такие библиотеки находятся в OBJC и считаются наследием. А взаимодействие с наследием всегда уродливое, странное и сложное. - person eonil; 10.11.2014