Estoy tratando de acceder al valor de un diccionario usando un número aleatorio, pero estoy perdido, ¿alguien puede guiarme?
Esto es lo que tengo:
var themes = ["Halloween": "😈💀🤡👻🤖👽", "Sports": "🏉🏓⛳️⚽️🎳🎱" , "Faces": "😀😍😨🤗😤🤤", "Animal": "🦓😼😺😿🙀🙈"] // This Does not work for some reason? lazy var themeRandomNumber = themes.count.arc4random lazy var currentTheme = themes[themeRandomNumber] //Cannot subscript a value of type[String : String]' with an index of type 'Int' Esto tiene sentido ya que estoy tratando de acceder a la clave usando un Int cuando obviamente es un String , pero no estoy seguro de cómo proceder.
lazy var currentEmoji = themes[currentTheme] extension Int{ var arc4random: Int{ if self > 0 { return Int(arc4random_uniform(UInt32(self))) } else if self < 0 { return -Int(arc4random_uniform(UInt32(abs(self)))) } else { return 0 } } }solo reemplaza
lazy var currentEmoji = themes[currentTheme]con
var currentTheme = themes.randomElement() print(currentTheme?.value) //Optional("🏉🏓⛳️⚽️🎳🎱") print(currentTheme?.key) //Optional("Sports") Aquí randomElement es una propiedad nueva que puede usar para obtener un elemento aleatorio.
Debido a que no está accediendo a la clave de su diccionario, debe seleccionar "Halloween" , "Sports" , "Faces" o "Animal" : las claves de su diccionario de themes .
Puede usar algún método de mapeo personalizado con Int.random(in: 0...3) o una enumeración de Keys conforme a CaseIterable , y luego debe seleccionar un carácter aleatorio (emoji) en la String para su clave dada (a través de un número aleatorio en el rango 0..<string.length ).
EDITAR
Con Swift 4.2+ (Xcode 10) puedes usar randomElement() :
var themes = ["Halloween": "😈💀🤡👻🤖👽", "Sports": "🏉🏓⛳️⚽️🎳🎱" , "Faces": "😀😍😨🤗😤🤤", "Animal": "🦓😼😺😿🙀🙈"] var randomEmoji = themes.randomElement()?.value.randomElement()