Ne peut pas convertir une valeur de type '[Chaîne]?' à attendre argument de type 'String'
Ce que je veux faire est de définir l'image de firstCard
être égale pour le fichier d'image avec le nom correspondant à firstCardString
.
Par exemple, dans le cas ci-dessous, le code pourrait être la mise en self.firstCard.image
pour afficher l'image nommée "card1" si elle choisit de façon aléatoire (j'ai tondu le reste de la matrice pour des raisons de concision, la chose entière contient 52 objets).
var deckArray = [
"card1": ["Bear","Ball"],
"card2": ["Bear","Ball"],
"card3": ["Bear","Ball"],
"card4": ["Bear","Ball"],
"card5": ["Bear","Ball"],
"card6": ["Bear","Ball"],
"card7": ["Bear","Ball"],
]
let firstRandomNumber = Int(arc4random_uniform(52))+1
let firstCardString = deckArray["card\(firstRandomNumber)"]
self.firstCard.image = UIImage(named: firstCardString)
Au lieu de cela, j'obtiens l'erreur suivante:
Ne peut pas convertir une valeur de type '[Chaîne]?' à attendre argument de type 'String'
Je ne suis pas entièrement sûr de ce que ce message d'erreur signifie, qu'est-ce que [String]?
?
OriginalL'auteur Andrew | 2015-10-26
Vous devez vous connecter pour publier un commentaire.
[]
est un tableau, et?
est une option. VotrefirstCardString
n'est pas une chaîne, mais une option de tableau de chaînes de caractères. Vous avez lu ledeckArray
dictionnaire de la valeur de cette carte, vous voyez, et donc votrefirstCardString
ressemble à ceci:Optional(["Bear", "Ball"])
. Je pense que vous vouliez dire:L'image basées sur des chaînes comme
"card1"
ou"card4"
. Je suppose que vous allez utiliser votre dictionnaire pour quelque chose d'autre, plus tard. Lorsque vous le faites, assurez-vous de déballer l'option valeur qu'elle renvoie:Sinon, envisager de faire
deckArray
un tableau (ce qui fera que le nom plus raisonnable), plutôt que d'un dictionnaire. Ensuite, vous n'aurez pas à traiter avec les options et sera en mesure d'accéder à des articles comme suit:self.firstCard.image = UIImage(named: "card\(firstRandomNumber)")
, n'est ce pas que la tentative de mettre en firstCard à un nom d'image qui est juste un nombre aléatoire entre 1 et 52, plutôt que de définir à la clé ("card4") qui correspond à l'indice avec ce numéro?Le nom de l'image sera "card1" ou "carte3" ou "card5". Voir le mot "carte" dans le nom? Il est suivi par
\(firstRandomNumber)
, qui vient s'insérer le nombre à droite après le mot "carte".veuillez répondre à la même question connexe ici stackoverflow.com/questions/42733225/...
OriginalL'auteur andyvn22
Il semble que
deckArray
est en fait, un dictionnaire, des tableaux de chaînes de caractères. Donc sifirstRandomNumber = 1
,deckArray["card\(firstRandomNumber)"]
sera de retour["Bear","Ball"]
. Ce n'est certainement pas une chaîne de!OriginalL'auteur Flying_Banana
Votre deckArray est un Dictionnaire, et votre firstCardString est un Tableau.
OriginalL'auteur Daniel