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: "#")
我想在数组的数组中搜索一个值,就像在这个例子中一样,但我不知道如何指示它“$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: "#")