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

iOS/Swift:在firstIndex方法中使用contains无法检测子串如何解决?

问题原因
  • 核心问题出在你操作的是嵌套数组,programArray实际为[[String]]类型,firstIndex遍历得到的$0是[String]子数组,而非字符串类型:
    • 你代码中调用的$0.contains(xxx)是Array的原生方法,作用是判断子数组中是否存在和xxx完全相等的元素,并非字符串的子串匹配方法
    • 传入完整时间串时,子数组中刚好存在完全匹配的元素,因此返回正确下标;传入日期子串时,子数组没有完全等于该子串的元素,自然返回nil
  • 你单独测试调用的是String类型的contains方法,作用为子串匹配,二者不属于同一个方法,因此测试结果和数组场景的表现不冲突。
修复方案

如果需求是只要嵌套数组中某个子数组的任意字符串包含目标子串,就返回该子数组的下标,修改判断逻辑,遍历子数组的字符串做子串匹配即可:

// 通用写法,适配子数组包含任意数量字符串的场景
let index = programArray.firstIndex { subArray in
    subArray.contains { str in
        str.contains("2021-14-09")
    }
}

// 简化写法,若你确定每个子数组只有1个字符串元素可以直接用
let index = programArray.firstIndex { $0.first?.contains("2021-14-09") ?? false }

内容的提问来源于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:54:01