2015-04-11 10 views
32

In der vorherigen Version von Swift hatte ich den folgenden Code.String-Länge in Swift 1.2 und Swift 2.0

Mit der neuesten Version von Swift 1.2, bekomme ich jetzt den folgenden Fehler.

'utf16Count' is unavailable: Take the count of a UTF-16 view instead, i.e. count(str.utf16) 

Ok, also ändere ich meinen Code wie folgt.

func myfunc(mystr: String) { 
    if count(mystr.utf16) >= 3 { 

Aber das funktioniert nicht. Ich erhalte jetzt stattdessen die folgende Fehlermeldung.

'(String.UTF16View) -> _' is not identical to 'Int16' 

Wie ist der richtige Weg, um die Länge einer Zeichenfolge mit Swift 1.2 zu erhalten?

+0

Recht auf Zählung klicken und „to Definition Jump ". – gnasher729

+0

Vielen Dank für den Tipp. – Molanda

Antwort

85

Sie können Erweiterung verwenden, denn es mag:

extension String { 
    var length: Int { return count(self)   } // Swift 1.2 
} 

und Sie können es verwenden:

if mystr.length >= 3 { 

} 

Oder Sie können direkt auf diese Weise zählen:

if count(mystr) >= 3{ 

} 

Und das ist funktioniert auch für mich:

if count(mystr.utf16) >= 3 { 

} 

Für Swift 2.0:

extension String { 
    var length: Int { 
     return characters.count 
    } 
} 
let str = "Hello, World" 
str.length //12 

Eine andere Erweiterung:

extension String { 
    var length: Int { 
     return (self as NSString).length 
    } 
} 
let str = "Hello, World" 
str.length //12 

Wenn Sie direkt verwenden möchten:

let str: String = "Hello, World" 
print(str.characters.count) // 12 

let str1: String = "Hello, World" 
print(str1.endIndex) // 12 

let str2 = "Hello, World" 
NSString(string: str2).length //12 
+0

Ja, ich verstehe OPs Fehler nicht, es funktioniert auch für mich. – Schemetrical

+0

Vielen Dank für den Vorschlag. Auch bei count (mystr) sehe ich den Fehler '(String) -> _' ist nicht identisch mit 'Int16'. – Molanda

+1

Ah, ich habe es gefunden. Die NSManagedObject-basierte Klasse hatte ein Feld namens "count", das als Int16 definiert wurde und die globale Zählfunktion außer Kraft setzte. Danke für den Gesundheitscheck. – Molanda

2

count(mystr) ist der richtige Weg, Sie müssen die Codierung nicht konvertieren.

Dieses: if count(mystr.utf16) >= 3 ist in Ordnung, solange Sie Int16(3)

bearbeiten tun: das ist eine alte Antwort. OP hat seine Frage aktualisiert, um Swift 2 widerzuspiegeln und die obige Antwort ist korrekt.

+0

Vielen Dank für den Vorschlag, aber das gibt mir den Fehler '(String) -> _' ist nicht identisch mit 'Int16'. – Molanda

+0

Nicht die empfohlene Methode, dies in Swift 2 zu tun, sondern stattdessen die Antwort von @Dharmesh Kheni. –

+0

@ King-Wizard Ich weiß, ich habe es vor einem halben Jahr gesehen. – Schemetrical

23

Sie haben noch Zeichen Eigenschaft zu verwenden, die enthält die Eigenschaft Anzahl:

yourString.characters.count

6

Hier ist alles in einem - kopiert von here

let str = "Hello" 
let count = str.length // returns 5 (Int) 

extension String { 
    var length: Int { return countElements(self) } // Swift 1.1 
} 
extension String { 
    var length: Int { return count(self)   } // Swift 1.2 
} 
extension String { 
    var length: Int { return characters.count } // Swift 2.0 
}