Доступ к значению в словаре с использованием случайного числа - PullRequest
4 голосов
/ 12 марта 2019

Я пытаюсь получить доступ к значению из словаря, используя случайное число, но я заблудился, может кто-нибудь подсказать?

Вот что у меня есть:

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'

Это имеет смысл, поскольку я пытаюсь получить доступ к ключу с помощью Int, когда он, очевидно, является String, но не уверен, как поступить?

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
        }
    }
} 

Ответы [ 2 ]

4 голосов
/ 12 марта 2019

Просто замените

lazy var currentEmoji = themes[currentTheme]

на

var currentTheme = themes.randomElement()
print(currentTheme?.value) //Optional("??⛳️⚽️??")
print(currentTheme?.key)  //Optional("Sports")

Здесь randomElement - это новое свойство, которое вы можете использовать для получения случайного элемента.

2 голосов
/ 12 марта 2019

Поскольку у вас нет доступа к ключу вашего словаря, вам необходимо выбрать "Halloween", "Sports", "Faces" или "Animal" - ваши ключи themes dict.

Вы можете использовать некоторый пользовательский метод сопоставления с Int.random (in: 0 ... 3) или перечислением Keys, соответствующим CaseIterable, а затем вам нужно выбрать случайный символ (emoji) в String для вашего данного Ключа (через случайное число в диапазоне 0..<string.length).

EDIT

С Swift 4.2+ (Xcode 10) вы можете использовать randomElement () :

var themes = ["Halloween": "??????", "Sports": "??⛳️⚽️??" , "Faces": "??????", "Animal": "??????"]
var randomEmoji = themes.randomElement()?.value.randomElement()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...