IOS/Swift: 如何表示.firstIndex 中$0 的第一个位置? '无法将类型 'Any' 的值转换为预期的参数类型 'String''

IOS/Swift: How to indicate the first position of the $0 in the .firstIndex ? 'Cannot convert value of type 'Any' to expected argument type 'String''

我想在数组的数组中搜索一个值,就像在这个例子中一样,但我不知道如何指示它“$0 中第一个元素的位置”?

var programArray: [Any] = []

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#"

//Convert Slots in array
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")
}

//Remove other dates than today
let index = programArray.firstIndex(where: {[=13=] == "2021-14-09"}) //PROBLEM: Cannot convert value of type 'Any' to expected argument type 'String'
    //access index here
programArray.remove(at: index)

提前致谢

let index = programArray.firstIndex(where: { innerArray in
    innerArray.contains(where: { [=10=].hasPrefix("2021-14-09") })
})

这就是你要找的,ΩlostA?

⚠️不要在连接的字符串上使用contain()

另一个答案和评论建议在连接部分使用 contain。尽管在特定情况下它可能 return 是正确的结果,但使用 contain 将导致模糊搜索并可能导致意外行为,例如查找不相关的对象


✅走对路

首先,试着把事情弄清楚:

var matrix = slots.split(separator: "#").map { [=10=].split(separator: "|") }
dump(matrix)

这将为您提供数据矩阵:

▿ 6 elements
  ▿ 4 elements
    - "2021-14-09 08:00:00"
    - "2021-14-09 09:00:00"
    - "ACCUEIL CAFE"
    - "Amphi A"
  ▿ 4 elements
    - "2021-14-09 09:00:00"
    - "2021-14-09 10:00:00"
    - "PLENIERE"
    - "Amphi A"
  ▿ 4 elements
    - "2021-14-09 10:00:00"
    - "2021-14-09 12:00:00"
    - "WORKSHOP"
    - "Salle Besse"
  ▿ 4 elements
    - "2021-14-09 12:00:00"
    - "2021-14-09 14:00:00"
    - "DEJEUNER"
    - "Cantine"
  ▿ 4 elements
    - "2021-14-09 14:00:00"
    - "2021-14-09 16:00:00"
    - "TESTDRIVES"
    - "XXX"
  ▿ 4 elements
    - "2021-14-09 16:00:00"
    - "2021-14-09 17:00:00"
    - "CLOTURE"
    - "Amphi A"

然后搜索您需要的索引并删除它,如:

if let searchedIndex = matrix.firstIndex(where: { [=12=].first?.hasPrefix("2021-14-09") == true }) {
    matrix.remove(at: searchedIndex)
}

此外,您可以将它们连接回原始格式,例如:

let updatedSlots = matrix.map { [=13=].joined(separator: "|") }.joined(separator: "#")