2015-04-11 13 views
32

Nella versione precedente di Swift, avevo il seguente codice.Lunghezza della stringa in Swift 1.2 e Swift 2.0

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

Con l'ultima versione di Swift 1.2, ora ho il seguente errore.

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

Ok, quindi cambio il mio codice come segue.

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

Ma questo non funziona. Ora ho il seguente messaggio di errore.

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

Qual è il modo corretto per ottenere la lunghezza di una stringa con Swift 1.2?

+0

Fare clic destro sul conteggio, e "Vai a definizione ". – gnasher729

+0

Grazie per il suggerimento. – Molanda

risposta

85

È possibile utilizzare l'estensione per le cose come:

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

e lo si può utilizzare:

if mystr.length >= 3 { 

} 

Oppure si può contare direttamente in questo modo:

if count(mystr) >= 3{ 

} 

E questo è Anche lavorando per me:

if count(mystr.utf16) >= 3 { 

} 

Per Swift 2.0:

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

Un'altra estensione:

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

Se volete l'uso diretto:

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

Sì, non capisco l'errore dell'OP, funziona anche per me. – Schemetrical

+0

Grazie per il suggerimento. Anche con count (mystr) vedo che l'errore '(String) -> _' non è identico a 'Int16'. – Molanda

+1

Ah, l'ho trovato. La classe basata su NSManagedObject aveva un campo chiamato "conteggio" definito come Int16 che sovrascriveva la funzione di conteggio globale. Grazie per il controllo di sanità. – Molanda

2

count(mystr) è il modo corretto, non è necessario convertire la codifica.

questo: if count(mystr.utf16) >= 3 è bene finché si fa Int16(3)

Edit: questa è una risposta vecchia. OP ha aggiornato la sua domanda per riflettere Swift 2 e la risposta sopra è corretta.

+0

Grazie per il suggerimento, ma questo mi dà l'errore "(String) -> _" non è identico a "Int16". – Molanda

+0

Non è il modo consigliato per farlo in Swift 2, ma vedi la risposta di @Dharmesh Kheni sopra. –

+0

@ King-Wizard Lo so, l'ho visto sei mesi fa. – Schemetrical

23

Bisogna utilizzare la proprietà caratteri che contiene la proprietà conteggio:

yourString.characters.count

6

Qui è tutto in uno - copiato da 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 
}