在 Swift 中显示字典中的一组随机图像和文本
Displaying a randomised set of image and text from a dictionary in Swift
我正在尝试从字典中检索并显示一组随机的图像及其相关文本,单击按钮即可。
首先,我尝试将图像数组和文本数组分开,并使用 Int(arc4random_uniform()) 从数组中随机选择要显示的元素。它起作用了,但在这样做时我需要确保图像及其关联的文本在它们自己的数组中处于相同的位置,我认为必须有更好的方法来通过将它们组合成多维数组或字典来构造数据。我最终使用了字典,但不知道如何显示图像和文本。
请参阅下面的代码 //这是我遇到的问题。我不知道如何从字典中检索图像及其文本。
我不确定是否可以将 myImage 和 myText var 放入字典中,并且不断重复 'myImage'、'[=29= 似乎有点乏味]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 由于图像大小等原因的蠕虫罐头
非常感谢任何关于解决上述问题的最佳方法的建议。谢谢
问题是 myImage.image = UIImage(named: randomSet[randomNumber])
行是错误的,因为 randomSet[randomNumber]
return 是 [String:String]
,而不是 String
。您需要做的是 randomSet[randomNumber]["myImage"]
,它将 return 您想要初始化的字符串 UIImage
.
另请注意:在这种情况下,您字典的键应该是 String
s。除非 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()
}
刚刚意识到我可以使用 .plist 文件来组织字典中的属性,而不是像那样在代码中将它们全部列出...
我正在尝试从字典中检索并显示一组随机的图像及其相关文本,单击按钮即可。
首先,我尝试将图像数组和文本数组分开,并使用 Int(arc4random_uniform()) 从数组中随机选择要显示的元素。它起作用了,但在这样做时我需要确保图像及其关联的文本在它们自己的数组中处于相同的位置,我认为必须有更好的方法来通过将它们组合成多维数组或字典来构造数据。我最终使用了字典,但不知道如何显示图像和文本。
请参阅下面的代码 //这是我遇到的问题。我不知道如何从字典中检索图像及其文本。
我不确定是否可以将 myImage 和 myText var 放入字典中,并且不断重复 'myImage'、'[=29= 似乎有点乏味]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 由于图像大小等原因的蠕虫罐头
非常感谢任何关于解决上述问题的最佳方法的建议。谢谢
问题是 myImage.image = UIImage(named: randomSet[randomNumber])
行是错误的,因为 randomSet[randomNumber]
return 是 [String:String]
,而不是 String
。您需要做的是 randomSet[randomNumber]["myImage"]
,它将 return 您想要初始化的字符串 UIImage
.
另请注意:在这种情况下,您字典的键应该是 String
s。除非 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()
}
刚刚意识到我可以使用 .plist 文件来组织字典中的属性,而不是像那样在代码中将它们全部列出...