Fermeture rapide: Impossible de convertir la valeur du type '(_) - & gt; Bool 'au type d'argument attendu
Je travaille avec le filter()
méthode rapide, mais face à un problème je n'arrive pas à reproduire dans une aire de jeux.
Edit: Téléchargé un exemple de projet ici: https://www.dropbox.com/s/5ce5uyxnpb0mndf/WeirdSwifty.zip?dl=0
J'ai un Card
struct qui contient un CardType
enum:
struct Card {
var name = ""
var type : CardType
enum CardType {
case Red
case Black
}
}
Et un Player
classe qui maintient un tableau de ces Card
éléments:
class Player {
var hand : [Card]
init() {
hand = ...
}
func redCards() -> [Card] {
return hand.filter({ (card) -> Bool in
return card.type == .Red
})
}
}
Cependant, Xcode est de lancer une erreur, peu importe comment j'essaie de formater cette fermeture. J'ai même laisser Xcode saisie semi-automatique de la fermeture de la signature/corps, la pensée, j'ai eu une erreur de syntaxe, mais il continue de le recréer la même (correct?) moyen:
J'ai aussi essayé de l'édition de ce Xcode génère automatiquement et en fournissant une version plus simple, en vain:
De la même façon:
Comme je le mentionne, je suis incapable de reproduire cela dans une simple aire de jeux exemple, mais je ne peux pas affiner ce qui est fait provoquant le problème dans mon projet principal.
C'est la seule erreur dans mon projet, et si j'ai fait un commentaire sur la méthode contenant la filter()
appel, il crée correctement.
Est cette erreur commune hareng rouge pour un autre problème réel?
Remarque: l'Utilisation de Xcode 7.3.1 (7D1014)
source d'informationauteur Craig Otis
Vous devez vous connecter pour publier un commentaire.
Quelque chose flakey est happing avec Swift est l'inférence de type. Donner
card
un type explicite et il va fonctionner.Vous n'avez pas besoin du type de retour ou le retour:
Remarque: cela fonctionne aussi:
Entièrement en précisant le
.Red
valeur d'enum résout le problème ainsi:Il a été mentionné dans les commentaires si vous vous déplacez à la définition de
Card
dans le même fichier que le filtre, il fonctionne. En fait, si vous divisez la définition de laCardType
enum deCard
et il suffit de déplacerCardType
dans le fichier avec le filtre, il fonctionne.