Swift 从数组取随机元素后删除报Cannot find 'randSachmeli'错如何解决
问题原因及解决方法
你代码存在4个可修复的问题,逐一调整即可正常运行:
- 变量名拼写错误:你定义的随机元素变量名为
randSachemli,调用移除方法时误写为randSachmeli,所以会报作用域内找不到对应变量的错误 - 数组定义为常量不可修改:你把
yvelaSachmeli声明为let常量,值类型的数组无法执行增删操作,需要改为var声明可变数组 - 自定义结构体未遵守
Equatable协议:Swift无法直接判断两个SachmelebiData实例是否相等,需要显式声明遵守Equatable协议才能做元素匹配 randomElement()返回可选值需要解包,且原生Array没有直接接收元素参数的remove方法,推荐通过索引移除执行效率更高也更安全
修正后可运行代码
// 结构体遵守Equatable协议,支持相等判断 struct SachmelebiData: Equatable { let name:String let link:String } var mainMenu:[SachmelebiData] = [ SachmelebiData(name: "ხინკალი", link: ""), SachmelebiData(name: "მწვადი", link: ""), SachmelebiData(name: "yleyveri", link: "") ] // 改为var声明可变数组 var yvelaSachmeli:[SachmelebiData] = mainMenu // 先判断数组非空再取随机索引,避免可选值崩溃问题 if let randomIndex = yvelaSachmeli.indices.randomElement() { // 取出随机元素 let randSachmeli = yvelaSachmeli[randomIndex] // 按索引移除对应元素 yvelaSachmeli.remove(at: randomIndex) // 后续可正常使用拿到的随机元素randSachmeli }
内容的提问来源于stack exchange,提问作者Nergezeev Alik
相关产品推荐
相关产品推荐

