2015-11-02 19 views
5

Ho una classe, dire PenguinSwift 2 ordinamento - non può invocare 'specie' con una lista di argomenti di tipo ...

class Penguin { 
    var beakLength: Float 
} 

Cercando di ordinare un array di Penguins come segue:

let penguins = [Penguin]() 
let sortedPenguins = penguins.sort { $0.beakLength < $1.beakLength } 

dà un messaggio di errore:

Impossibile richiamare 'sort' con un elenco di argomenti di tipo '(@noescape (Penguin, Penguin) -> Bool)'

prevista una lista di argomenti di tipo '(@noescape (Self.Generator.Element, Self.Generator.Element) -> Bool)'

Cosa mi sto perdendo qui?

+0

E funziona nel mio parco giochi ([screenshot] (https://www.evernote.com/l/AOzUny30na5PLYz4Y781afHdBJ7JU-j5Xp0)). – Moritz

+0

Questo è strano - lo fa anche per me ... ma non verrà compilato –

+0

Gli errori che mostri non possono venire da questo semplice frammento, funziona così com'è. Quindi probabilmente c'è qualcos'altro nel tuo progetto sulla tua classe o sulla tua funzione di ordinamento che non stai mostrando. Modifica la tua domanda con parti rilevanti del tuo codice attuale. – Moritz

risposta

7

Per chi ha lo stesso problema, risulta che il codice sopra riportato non era del tutto corretto. Ciò che era in realtà più simile:

var sortedPenguins = [Chimp]() 

let penguins = [Penguin]() 
sortedPenguins = penguins.sort { $0.beakLength < $1.beakLength } 

D'oh!

+1

Corri nello stesso numero oggi.Il compilatore dà un messaggio di errore totalmente fuorviante. –

0
class Penguin : CustomStringConvertible { 
    var description: String { return beakLength.description } 
    var beakLength: Float 
    init(length: Float){ 
     beakLength = length 
    } 
} 


var penguins = [Penguin]() 
penguins.append(Penguin(length: 10)) 
penguins.append(Penguin(length: 20)) 
penguins.append(Penguin(length: 5)) 
print(penguins) 
print(penguins.sort { $0.beakLength < $1.beakLength }) 
1

noti che in Swift 3, la funzione ordinamento esegue un ordinamento "in luogo" e non restituisce un valore (mutating func sort()). Per creare una copia ordinata della matrice originale, utilizzare ora ordinati (func sorted() -> [Element]).

0

Poiché Ordina è obsoleto in swift3 è possibile provare questo codice per il conteggio dei caratteri massimi in un array.

let Penguin = ["as","asc","you","bce","csi","aasi","aaas","this"] 
let maxLen = penguin.sorted{ $0.characters.count > $1.characters.count} 
print(maxLen) 

Il risultato dovrebbe essere [ "aasi", "AAAS", "questo", "ASC", "voi", "aC", "CSI", "come"]

+0

Questo non tenta nemmeno di rispondere alla mia domanda. –

+0

Volevo solo menzionare che in rapido "Ordinato" invece di "ordina" per l'obiettivo c. come si potrebbe usare penguin.sorted {$ 0.caratteri.count> $ 1.caratteri.count} –

Problemi correlati