Swift数组随机元素方法报错:randomElement()为何无法正常工作?
问题解答
核心原因:可选类型的嵌套差异
首先明确你的数组类型:UIImage(named:)返回的是UIImage?(可选类型,因为图片可能找不到),所以你创建的diceArray实际类型是[UIImage?]——数组里每个元素都是可选的UIImage。
diceArray.randomElement():这个方法的返回值是Element?,这里的Element就是数组的元素类型UIImage?,所以最终返回的是UIImage??(可选的可选值),而UIImageView.image需要的是UIImage?,类型不匹配就触发了报错。diceArray[Int.random(in: 0...5)]:数组下标访问直接返回对应位置的元素,也就是UIImage?,和image属性的类型完全匹配,所以能正常运行。
解决办法
有几种实用的修复方式:
1. 用可选绑定处理双层可选
通过可选绑定拆解双层可选,安全赋值:
if let randomDice = diceArray.randomElement() { diceImageView1.image = randomDice }
2. 提前过滤数组中的nil值(推荐)
如果确定所有骰子图片都存在于资源包中,可以用compactMap过滤掉数组里的nil,让数组类型变为[UIImage],此时randomElement()返回的就是UIImage?,直接赋值即可:
let diceArray = [ UIImage(named: "DiceOne"), UIImage(named: "DiceTwo"), UIImage(named: "DiceThree"), UIImage(named:"DiceFour"), UIImage(named:"DiceFive"), UIImage(named:"DiceSix") ].compactMap { $0 } diceImageView1.image = diceArray.randomElement()
3. 强制解包(不推荐)
如果能100%保证所有图片资源都存在,可以直接强制解包双层可选,但一旦图片缺失会导致崩溃:
diceImageView1.image = diceArray.randomElement()!
内容的提问来源于stack exchange,提问作者Beshoy
相关产品推荐
相关产品推荐

