2014-06-14 11 views
9

Mi chiedevo perché questo funziona (si noti che sto usando tipi NSString):NSScanner funziona con Swift Strings?

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" 

ma se cerco di utilizzare i tipi di "Stringa" al posto di "NSString", questo non verrà compilato:

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) 

L'errore dice "Impossibile convertire il tipo dell'espressione" BOOL "per digitare" inout String? " sulla linea scanUpToString. Non sono sicuro di cosa BOOL è addirittura riferimento.

Quindi, non NSScanner non funziona con i tipi di Swift String? C'è un nuovo comando dovrei usare, invece?

risposta

12

Il secondo .. parametro del metodo scanUpToString deve essere un puntatore ad una NSString le altre params possono essere String Questo codice funziona:

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 " 
+0

Così, per curiosità, fa questo ha un senso, allora vi aspettate che rimarrà così? modo anche quando Swift va in produzione? Mi sembra strano che una funzione di tipo stringa non sia in grado di produrre a Tipo di stringa Swift. – Narwhal

+1

@Narwhal Ha senso perché tali librerie sono tutte in OBJC e vengono considerate come eredità. E l'inter-op con l'eredità è sempre brutta, strana e dura. – Eonil