为什么randomElement()只从我的数组中返回同一个字符串?
问题原因
你代码的核心问题出在随机池的数据源会被后续赋值操作修改:
- 你构建随机数组
cardOptions时用的是self.apple、self.cherry、self.star三个可变属性,第一次执行这段代码后,这三个属性会被全部赋值为同一个randomCard的值。 - 下一次触发按钮点击执行代码时,
cardOptions的三个元素已经完全相同,randomElement()不管怎么取,结果都只能是这唯一的相同值。如果第一次运行刚好随机到了star,后续所有点击的结果都会固定为star。 - 如果首次运行就固定返回
star,可以先检查print(cardOptions)的输出,确认第一次执行代码时,数组的三个元素是否已经是相同值,排查是否有其他前置逻辑提前修改了这三个属性的值。
修复方案
如果需求是每次点击都从三个原始选项中随机取值,直接用固定的原始值构建随机池即可,不要使用会被修改的实例属性作为随机源:
let cardOptions = ["apple", "cherry", "star"] print(cardOptions) let randomCard = cardOptions.randomElement()! print(randomCard) // 更新界面展示 self.apple = randomCard self.cherry = randomCard self.star = randomCard
内容的提问来源于stack exchange,提问作者JakeSteirer21
相关产品推荐
相关产品推荐

