Отображение рандомизированного набора изображений и текста из словаря в Swift - PullRequest
0 голосов
/ 17 октября 2019

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

Сначала я попытался разделить массив изображений и текстовый массив и использовать Int (arc4random_uniform ()) для случайного выбора элементов из массива для отображения. Это сработало, НО при этом мне нужно убедиться, что изображение и связанный с ним текст находятся в одинаковом положении в их собственном массиве, и я подумал, что должны быть лучшие способы структурировать данные, объединяя их в многомерный массив или словарь. Я закончил тем, что использовал словарь, но застрял, не знаю, как получить изображение и текст для отображения.

См. В коде ниже // ЭТО БИТ, КОТОРЫЙ Я ПОЛУЧИЛ В . Я не знаю, как извлечь изображение и его текст из словаря.

Я не уверен, нормально ли помещать переменные myImage и myText в словарь, и повторять это немного утомительно ' myImage ',' myText 'для каждого набора.

@IBOutlet weak var myImage: UIImageView!
@IBOutlet weak var myText:  = UILabel()

var randomSet = [[myImage:"1-image", myText:"text for 1"], [myImage:"2-image", myText:"text for 2"], [myImage:"3-image", myText:"text for 3"], [myImage:"4-image", myText:"text for 4"], [myImage:"5-image", myText:"text for 5"]]

func randomiseSet (){
        let randomNumber:Int = Int(arc4random_uniform(5))
        //THIS IS THE BIT I GOT STUCK AT
        myImage.image = UIImage(named: randomSet[randomNumber])
        myText.text = randomSet[randomNumber]
        //END
    }

@IBAction func showRandomSet(_ sender: UIButton) {
        randomiseSet()
    }

Я также попытался вместо использования myImage.image = .... myText.text= ....

return randomSet[[randomNumber]]

Оба не работали и показали 'Build Failed'

Я также исследовал использование CoreData, но я новичок, и это открывает другую банку червядля меня, что касается двоичных данных для изображений против использования URL из-за размера изображения и т. д.

Любое предложение о том, что является лучшим способом исправить вышеуказанное, очень ценится. Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Только что понял, что могу использовать файл .plist для сохранения свойств в словаре, а не перечислять их все в коде, подобном этому ...

0 голосов
/ 17 октября 2019

Проблема в том, что строка myImage.image = UIImage(named: randomSet[randomNumber]) неверна, потому что randomSet[randomNumber] возвращает [String:String], а не String. Вместо этого вам нужно будет randomSet[randomNumber]["myImage"], который вернет строку, которую вы хотите инициализировать UIImage.

Также обратите внимание: ключи вашего словаря должны быть String с в этом случае. Если myImage и myText не объявлены как String s в другом месте, ваш словарь настроен неправильно. Попробуйте изменить randomSet на [["myImage":"1-image", "myText":"text for 1"], ["myImage":"2-image", "myText":"text for 2"], ["myImage":"3-image", "myText":"text for 3"], ["myImage":"4-image", "myText":"text for 4"], ["myImage":"5-image", "myText":"text for 5"]]

Итак, для реализации изменений ваш код должен выглядеть примерно так:

@IBOutlet weak var myImage: UIImageView!
//Note this change from `@IBOutlet weak var myText:  = UILabel()`, which is incorrect
@IBOutlet weak var myText: UILabel!

var randomSet: [[String:String]] = [["myImage":"1-image", "myText":"text for 1"], ["myImage":"2-image", "myText":"text for 2"], ["myImage":"3-image", "myText":"text for 3"], ["myImage":"4-image", "myText":"text for 4"], ["myImage":"5-image", "myText":"text for 5"]]

func randomiseSet (){
    let randomNumber:Int = Int(arc4random_uniform(5))
    myImage.image = UIImage(named: randomSet[randomNumber]["myImage"]!)
    myText.text = randomSet[randomNumber]
}

@IBAction func showRandomSet(_ sender: UIButton) {
    randomiseSet()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...