我有 7 个字符串数组。
var redArray : [String] = ["2022-07-13", "2022-07-14","2022-07-15"] var blueArray : [String] = ["2022-07-13", "2022-07-14","2022-07-16"] ... And five more of the same format
我正在尝试创建一种方法,它将通过七个数组并像下面的一样工作(下面的示例适用于两个数组):
if redArray.contains(someDate) && blueArray.contains(someDate) { return [UIColor.red, UIColor.blue] } else if redArray.contains(someDate) { return [UIColor.red] } else if blueArray.contains(someDate) { return [UIColor.blue] } return [UIColor.clear]
所以它应该在数组中找到日期的匹配项,并返回具有此匹配项的数组的颜色名称。如果没有匹配 - 应返回单一颜色。对于两个数组很容易做到这一点。但我不明白如何循环其中的 7 个 :(
当然,也可以手动完成。但我想一定有一种聪明的方法来实现循环——尽管我不够聪明,无法弄清楚如何实现。
PS我不知道是否重要,但是将使用此方法的功能如下:
func calendar(_ calendar: FSCalendar, appearance: FSCalendarAppearance,eventDefaultColorsFor date: Date) -> [UIColor]? { ... }
你可以简单地这样做:
var colors: [UIColor] = [] if redArray.contains(someData) { colors.append(.red) } if blueArray.contains(someData) { colors.append(.blue) } if greenArray.contains(someData) { colors.append(.green) } return colors.isEmpty ? [.clear] : colors
如果你真的想要循环,从:
let tuples: [(UIColor, [String])] = [(.red, redArray), (.blue, blueArray), (.green, greenArray)] var colors: [UIColor] = []
基本for循环:
for aTuple in tuples { if aTuple.1.contains(someData) { colors.append(aTuple.0) } }
基本 for 循环where:
where
for aTuple in tuples where aTuple.1.contains(someData) { colors.append(aTuple.0) }
有一个forEach:
forEach
tuples.forEach { if $0.1.contains(someData) { colors.append($0.0) } }
如果你喜欢reduced(into:_:):
reduced(into:_:)
let colors = tuples.reduce(into: [UIColor]()) { partialResult, current in guard current.1.contains(someData) else { return } partialResult.append(current.0) }
而且还在return colors.isEmpty ? [.clear] : colors最后。
return colors.isEmpty ? [.clear] : colors