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

iOS/Swift中firstIndex指定$0首元素位置及类型报错问题

问题原因
  • 类型不匹配:你声明programArray为[Any]类型,但实际存储的元素是分割后得到的[String]类型子数组,遍历时拿到的$0是Any类型,无法直接和字符串做相等判断,触发类型转换报错。
  • 匹配逻辑错误:你的需求是匹配子数组的第一个元素值,不是将整个子数组和目标字符串直接对比。
  • 隐藏问题:你要匹配的目标值只有日期,但是子数组第一个元素是带具体时间的完整字符串,直接用==对比永远匹配不到结果。
修正方案
  1. 把programArray的类型明确声明为[[String]],既符合你实际存储的嵌套字符串数组结构,也避免了Any类型的冗余转换问题。
  2. 写firstIndex的匹配规则时,先判断子数组不为空,再取子数组的第0位元素和目标值做前缀匹配。
  3. 对firstIndex返回的可选值做安全解包,避免找不到对应值时调用remove(at:)崩溃。
完整修正代码
// 明确类型为嵌套字符串数组,不要用Any
var programArray: [[String]] = []

let slots: String =  "2021-14-09 08:00:00|2021-14-09 09:00:00|ACCUEIL CAFE|Amphi A#2021-14-09 09:00:00|2021-14-09 10:00:00|PLENIERE|Amphi A#2021-14-09 10:00:00|2021-14-09 12:00:00|WORKSHOP|Salle Besse#2021-14-09 12:00:00|2021-14-09 14:00:00|DEJEUNER|Cantine#2021-14-09 14:00:00|2021-14-09 16:00:00|TESTDRIVES|XXX#2021-14-09 16:00:00|2021-14-09 17:00:00|CLOTURE|Amphi A#"

//将Slots转换为数组
let stringArray = slots.components(separatedBy: "#")
if stringArray.count > 1 {
    for i in 0..<stringArray.count {
        let intermediateTwo = stringArray[i]
        let strinArrayTwo = intermediateTwo.components(separatedBy: "|")
        
        if strinArrayTwo.count > 1 {
            programArray.append(strinArrayTwo)
            
        } else {
            print("not found")
        }
    }
} else {
    print("not found")
}

// 匹配子数组第一个元素的日期前缀,安全解包可选值
if let index = programArray.firstIndex(where: { subArray in
    // 先判断子数组不为空再取第一个元素,避免越界
    guard !subArray.isEmpty else { return false }
    // 匹配日期前缀,需要完全匹配就把hasPrefix改成==
    return subArray[0].hasPrefix("2021-14-09")
}) {
    programArray.remove(at: index)
} else {
    print("未找到匹配的日期数据")
}
补充优化

如果你的需求是移除所有非目标日期的条目,不要用firstIndex只删第一个,直接用filter过滤数组更方便:

programArray = programArray.filter { subArray in
    guard !subArray.isEmpty else { return false }
    // 保留符合日期的条目,反过来写就是移除不符合的
    return subArray[0].hasPrefix("2021-14-09")
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:30:01