Opérateur binaire '~=' ne peut pas être appliquée à des opérandes de type 'String' et de la 'Chaîne de caractères?'
J'ai un interrupteur simple-déclaration qui n'est pas aussi simple que cela.
switch(bubble?.name){ //bubble is SKPhysicsBody
case "largeBubble": //<= error
newBubbleSize = "medium"
break;
default:
newBubbleSize = "large"
break;
}
Ici, j'obtiens le message d'erreur que j'ai mentionné dans le titre Binary operator '~=' cannot be applied to operands of type 'String' and 'String?'
. Et je n'ai aucune idée de pourquoi c'est un problème que l'un d'eux est une option.
OriginalL'auteur Jurik | 2015-05-30
Vous devez vous connecter pour publier un commentaire.
En raison de Le Chaînage Optionnel,
bubble?.name
a typeString?
. Vous avez plusieurs options:"largeBubble"?
dans votrecase
expression (Swift 2+ uniquement).switch
, de sorte que le commutateur argument sera unString
au lieu deString?
.bubble!.name
(oububble.name
si c'est unSKPhysicsBody!
) si vous êtes absolument sûr qu'il ne sera pas nulswitch(bubble?.name ?? "unknown") { ... }
.Bien sûr, mais ensuite vous allez faire un inutile comparaison avec la chaîne "inconnu" dans certains cas 🙂 bien sûr, c'est sans doute pour rapide qu'il n'a pas d'importance...
bubble!.name
ne fonctionne pas bien, seulement en combinaison avecsome()
. La pensée c'est pourquoi il y a toujours un défaut ... si le nom n'est pas défini.exactement ce type est
bubble
? (SKPhysicsBody
ouSKPhysicsBody?
ou peut-être!
)C'est
bodyA
oubodyB
deSKPhysicsContact
.OriginalL'auteur jtbandes
@Jtbandes dit, le problème est le résultat de
bubble?.name
typeString?
. Une solution alternative, pour ceux donné, est de remplacer la~=
opérateur de prendre unString?
etString
comme arguments, par exemple:Ou, pour le rendre plus générique:
Equatable
serait suffisant 🙂Bravo pour ça, j'ai mis à jour ma réponse.
OriginalL'auteur ABakerSmith
“Les valeurs ne sont jamais implicitement converti en un autre type. Si vous avez besoin de convertir une valeur d'un type différent, explicitement créer une instance du type désiré.”
Ici la largeur est un type Entier, il a été converti en Chaîne par Chaîne(Int) fonction
OriginalL'auteur Pias
Dans Swift 2.0 (sender: UIButton)! pour le commutateur chaîne fonctionne.
Dans Swift 2.0, (sender: AnyObject) alors !! pour le commutateur chaîne fonctionne.
l'erreur que j'ai faite est d'utiliser AnyObject au lieu de UIButton.
OriginalL'auteur Ranjithkumar