2014-06-14 22 views
9

bu (haber ben NSString türleri kullanıyorum) neden çalıştığını merak ediyorum:NSScanner Swift Strings ile çalışıyor mu?

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" 

ama bunun yerine "NSString" nin "Dize" türlerini kullanmaya çalışırsanız, bu derleme olmaz:

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) 

Hata, "İfade'nin türünü 'BOOL' türünde 'inout String” olarak yazamaz. scanUpToString hatta. Ben bile atıfta ne BOOL emin değilim.

Yani, NSScanner Swift dize türleri ile çalışmıyor? Bunun yerine kullanarak gereken yeni bir komut var mı?

cevap

12

ikinci .. scanUpToString yöntemin parametresi bir NSString bir gösterici olmalıdır diğer parametreler String olabilir Bu kod çalışacaktır:

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

Yani, meraktan, yaptığı daha sonra mantıklı sen o kalacaktır bekliyor musunuz? Her ne kadar Swift, üretime geçtiğinde bile, bir dizinin herhangi bir işlevi olduğu anlamına gelmemek garip geliyor. Swift String türü. – Narwhal

+1

@Narwhal Bu kitaplıkların hepsi OBJC'de olduğu ve bir miras olarak görüldüğü için mantıklı. Ve mirasıyla ara-içi her zaman çirkin, tuhaf ve zor. – Eonil