2015-06-09 7 views
34

Appena scaricato Xcode 7 Beta, e questo errore è apparso sulla parola chiave enumerate.Swift 2.0: 'enumerate' non è disponibile: chiama il metodo 'enumerate()' nella sequenza

for (index, string) in enumerate(mySwiftStringArray) 
{ 

} 

Qualcuno può aiutarmi a superare questo?

Inoltre, sembra che count() non funzioni più per il conteggio della lunghezza di String.

let stringLength = count(myString) 

Sulla linea di cui sopra, il compilatore dice:

'count' non è disponibile: accedere alla proprietà 'count' sulla raccolta.

Apple ha rilasciato alcuna guida di programmazione per Swift 2.0?

+0

Mi manca anche una guida di programmazione. –

+0

In Xcode 7.1.1 il messaggio di errore è piuttosto descrittivo: 'enumerate' non è disponibile: chiama il metodo 'enumerate()' nella sequenza – arcseldon

risposta

105

Molte funzioni globali sono stati sostituiti da metodi di estensione protocollo, una nuova caratteristica di Swift 2, così enumerate() è ora un metodo di estensione per SequenceType:

extension SequenceType { 
    func enumerate() -> EnumerateSequence<Self> 
} 

e utilizzato come

let mySwiftStringArray = [ "foo", "bar" ] 
for (index, string) in mySwiftStringArray.enumerate() { 
    print(string) 
} 

E String non è più conforme allo SequenceType, è necessario utilizza la proprietà characters per ottenere la raccolta di caratteri Unicode . Inoltre, count() è un metodo di estensione del protocollo di CollectionType invece di una funzione globale:

let myString = "foo" 
let stringLength = myString.characters.count 
print(stringLength) 

Aggiornamento per Swift 3:enumerate() è stato rinominato enumerated():

let mySwiftStringArray = [ "foo", "bar" ] 
for (index, string) in mySwiftStringArray.enumerated() { 
    print(string) 
} 
+1

Molto ben spiegato e grazie per l'aiuto: D – itsji10dra

+5

Swift sembra davvero una buona lingua adesso! – Sulthan

+0

Buona mossa. Non vuoi che PHP possa iniziare a fare questo ... – Dave

0

So che questo è un thread vecchio, ma ho appena giocato con Swift 2.0 e Playgrounds e mi sono imbattuto nello stesso problema che pensavo condividerei una soluzione che utilizza il metodo enumerate() per una stringa

// This line works in Swift 1.2 
// for (idx, character) in enumerate("A random string, it has a comma.") 

// Swift 2.x 
let count = inputString.characters 

for (idx, character) in count.enumerate() where character == "," { 

    // Do something with idx 
} 

Spero che questo aiuti

Grazie Kai

5

C'è stato un aggiornamento per Swift 2 sull'uso enumerare().

Invece di enumerate(...), le persone dovrebbero usare

... .enumerate()

Il motivo è che molte funzioni a livello mondiale sono stati sostituiti da metodi di estensione del protocollo e otterranno un errore enumerate.

Spero che questo aiuti. Tutto il meglio. n

Problemi correlati