You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift数组遍历异常:无法进入循环并提取元素至变量

数组元素提取到独立变量的问题解决方案

嘿,我来帮你搞定这个问题!首先你的循环没执行,几乎可以肯定是因为myarray是空数组——要么UserDefaults里根本没有selectArray这个key,要么对应的存储值就是空的,所以你用?? [String]()兜底后得到的是空数组,自然不会进入循环啦。

既然你明确数组里有两个元素,完全没必要用遍历的方式来赋值,直接通过索引访问或者解构赋值更简单高效,下面给你两种靠谱的写法:

方案一:索引直接取值(适用于确定数组有至少2个元素的场景)

如果能保证myarray一定包含两个元素,直接这么写就行,记得加个长度判断避免越界崩溃:

let myarray = UserDefaults.standard.stringArray(forKey: "selectArray") ?? [String]()

if myarray.count >= 2 {
    let listItem = myarray[0]
    let cuisineItem = myarray[1]
    print("listItem: \(listItem), cuisineItem: \(cuisineItem)")
} else {
    // 这里处理数组元素不够的情况,比如给默认值或者提示用户
    print("数组元素不足2个,请检查UserDefaults的存储内容!")
}

方案二:Swift解构赋值(更简洁,兼容元素不足的情况)

Swift 5.1及以上支持数组的解构赋值,这种写法更清爽,还能给默认值防止数组元素不够:

let myarray = UserDefaults.standard.stringArray(forKey: "selectArray") ?? [String]()

// 解构时给默认值,就算数组元素不足也不会出问题
let (listItem, cuisineItem) = (
    myarray.first ?? "默认列表项",
    myarray.dropFirst().first ?? "默认美食项"
)
print("listItem: \(listItem), cuisineItem: \(cuisineItem)")

另外,你可以先排查下UserDefaults里的存储是否正确,比如在代码开头加一行打印:

print("UserDefaults中selectArray的内容:\(UserDefaults.standard.stringArray(forKey: "selectArray"))")

如果输出是nil或者[],那就要检查你之前把数组存入UserDefaults的代码是不是没正确执行哦。

内容的提问来源于stack exchange,提问作者raheem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:18:00