Как преобразовать изображение кости в значение Int? в swift

#ios #swift

#iOS #swift

Вопрос:

Привет, я создаю простую игру в кости и новичок в программировании. У меня есть изображения кубиков от 1 до 6. Я знаю, как его свернуть и применить random.

 @IBAction func rollPressed(_ sender: UIButton) {
    let diceArray=[#imageLiteral(resourceName: "DiceOne"),#imageLiteral(resourceName: "DiceTwo"),#imageLiteral(resourceName: "DiceThree"),#imageLiteral(resourceName: "DiceFour"),#imageLiteral(resourceName: "DiceFive"),#imageLiteral(resourceName: "DiceSix")]
    diceFour.image=diceArray.randomElement()
 }
  

вот так.
Но я хочу сопоставить изображение с типом данных Int и выполнить случайное.
И, наконец, я могу распечатать результат в значении типа данных Int.

Я пытаюсь использовать словарь, например

 let diceDictionary = [#imageLiteral(resourceName: "DiceOne"):1,#imageLiteral(resourceName: "DiceTwo"):2,#imageLiteral(resourceName: "DiceThree"):3,#imageLiteral(resourceName: "DiceFour"):4,#imageLiteral(resourceName: "DiceFive"):5,#imageLiteral(resourceName: "DiceSix"):6]
  

но я застрял на том, как я могу получить значение.
Пожалуйста, кто-нибудь мне поможет?

Ответ №1:

Вам не нужен словарь. Вместо того, чтобы иметь дело с изображениями, занимайтесь индексами.

 let diceArray = [#imageLiteral(resourceName: "DiceOne"),#imageLiteral(resourceName: "DiceTwo"),#imageLiteral(resourceName: "DiceThree"),#imageLiteral(resourceName: "DiceFour"),#imageLiteral(resourceName: "DiceFive"),#imageLiteral(resourceName: "DiceSix")]


@IBAction func rollPressed(_ sender: UIButton) {
    let index = Int.random(in: 0..<diceArray.count)
    diceFour.image = diceArray[index]
    print(index)
}
  

Имейте в виду, что индексы типов коллекций основаны на нуле.

Ответ №2:

Было бы лучше Swift использовать перечисление :

 struct DiceFace: Int, CaseIterable {
    case one = 1
    case two = 2
    ...
    case six = 6


    var image: UIImage {

        switch self {
            case .one:
            return #imageLiteral(resourceName: "DiceOne")!
            ...
            case .sex:
            return #imageLiteral(resourceName: "DiceSix")!
        }
    }
}
  

Позже вы можете создать массив со всеми своими гранями, используя DiceFace.allCases или вручную :
let allFaces: [DiceFace] = [.one, .two, .three, .four, .five, .six]

Затем вы можете получить доступ к изображению лица с помощью :

 let randomFace = allFaces.shuffle().first!
let image = myFace.image