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
相关产品推荐
相关产品推荐

