Lo que quiero hacer es configurar la imagen de firstCard a ser igual para el archivo de imagen con el nombre que corresponde a firstCardString.

Por ejemplo, en el caso siguiente, el código podría ser el establecimiento de self.firstCard.image para mostrar la imagen con el nombre «card1» si se elige aleatoriamente (yo he recortado el resto de la matriz de la brevedad, el pleno de la cosa contiene 52 objetos).

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)

Lugar, me da el siguiente error:

No se puede convertir el valor de tipo ‘[String]?’ a la espera argumento de tipo ‘String’

No estoy totalmente seguro de lo que este mensaje de error significa, lo que es [String]??

OriginalEl autor Andrew | 2015-10-26

3 Comentarios

  1. 6

    [] es una matriz, y ? es opcional. Su firstCardString no es una cadena, pero opcional, un array de cadenas. Has leído la deckArray diccionario del valor de la tarjeta, se puede ver, por lo que su firstCardString en realidad se ve algo como esto: Optional(["Bear", "Ball"]). Creo que quiso decir:

    self.firstCard.image = UIImage(named: "card\(firstRandomNumber)")

    De esta forma se establecerá la imagen basado en cadenas como "card1" o "card4". Supongo que usted va a usar su diccionario para algo más, más adelante. Cuando lo haga, asegúrese de que desdoblar el valor opcional devuelve:

    if let cardArray = deckArray["card\(firstRandomNumber)"] {
        //do something with bears and balls
    }

    Como alternativa, considere la posibilidad de hacer deckArray una matriz (que va a hacer el nombre más razonable), en lugar de un diccionario. Entonces usted no tendrá que lidiar con opcionales y será capaz de acceder a los elementos de la siguiente manera:

    let cardArray = deckArray[firstRandomNumber]
    //do something with bears and balls
    Pero si yo uso self.firstCard.image = UIImage(named: "card\(firstRandomNumber)"), no que intenta establecer firstCard a un nombre de la imagen que es sólo un número al azar entre 1 y 52, en lugar de ponerlo a la clave («card4») que se corresponde con el índice, con ese número?
    El nombre de la imagen será «card1» o «card3» o «card5». Ver la palabra «tarjeta» que hay en el nombre? Es seguido por \(firstRandomNumber), que se inserta el número de la derecha después de la palabra «tarjeta».
    por favor, conteste la misma pregunta relacionada con la aquí stackoverflow.com/questions/42733225/…

    OriginalEl autor andyvn22

  2. 0

    Parece deckArray es, de hecho, un diccionario de las matrices de cadenas. Por lo tanto, si firstRandomNumber = 1, deckArray["card\(firstRandomNumber)"] volverá ["Bear","Ball"]. Eso definitivamente no es una cadena!

    por favor conteste las similares relacionados con la cuestión que aquí stackoverflow.com/questions/42733225/…

    OriginalEl autor Flying_Banana

Dejar respuesta

Please enter your comment!
Please enter your name here