Sto lavorando con il metodo filter()
in Swift, ma ho riscontrato un problema che non riesco a riprodurre in un parco giochi.Chiusura rapida: impossibile convertire il valore di tipo '(_) -> Bool' nel tipo di argomento previsto
Edit: caricato un progetto di esempio qui: https://www.dropbox.com/s/5ce5uyxnpb0mndf/WeirdSwifty.zip?dl=0
ho una struct Card
che contiene un CardType
enum:
struct Card {
var name = ""
var type : CardType
enum CardType {
case Red
case Black
}
}
e una classe Player
che mantiene una matrice di questi Card
elementi:
class Player {
var hand : [Card]
init() {
hand = ...
}
func redCards() -> [Card] {
return hand.filter({ (card) -> Bool in
return card.type == .Red
})
}
}
Tuttavia, Xcode lancia un errore, non importa quanto cerco di formattare questa chiusura. Ho anche lasciato Xcode completare automaticamente la firma di chiusura/corpo, pensando ho avuto un errore di sintassi, ma mantiene ricreando lo stesso (giusto?) Modo:
Ho anche provato la modifica di ciò che genera automaticamente Xcode e fornendo una versione più semplice, senza alcun risultato:
Allo stesso modo:
Come ho già detto, non sono in grado di riprodurlo in un semplice esempio di gioco, ma non riesco a restringere cosa sia effettivamente causando il problema nel mio progetto principale.
Questo è l'unico errore nel mio progetto e se commento il metodo che contiene la chiamata filter()
, si costruisce correttamente.
Questo errore è una falsa pista comune per qualche altro problema reale?
Nota: L'uso Xcode 7.3.1 (7D1014)
Provare a dare carta di un tipo esplicito: 'ritorno hand.filter ({(scheda: Scheda) -> Bool in cambio card.type == .Red })' – vacawama
Il codice compila bene per me ... forse prova a pulire la tua cartella di costruzione? – Hamish
Non hai 'card' o' Card' definito da qualche altra parte nello stesso ambito? Il codice si compila bene anche per me. – Sulthan