ios - 为什么我的 if string == else if != 语句只适用于数组中的最后一个值?

标签 ios swift

我有一个月度日历 Collection View 和一个正在解析以获取一些日期的 xml。我试图在日历 View 上显示这些带边框的日期,但遇到了一个我不确定如何调试的问题 - 不是来自 xml 的日期也会显示它们周围的边框,然后在您滚动到时随机更改下个月来回,像这样 - https://imgur.com/a/mxyUtJe

这是我现在设置边框的代码。是否有任何明显错误或遗漏的地方

//Mark: Configure Calendar Cell
func configureCalendarCell(cell: JTAppleCell?, cellState: CellState) {
    guard let myCustomCell = cell as? CalendarCell else { return }

    //configure functions including:
    getEventDates(cell: myCustomCell, cellState: cellState)
}

//Mark: set events from XML == selected cell from Calendar
func getEventDates(cell: CalendarCell, cellState: CellState) {

        for calendarDate in tableViewDataSource {
            let datesFromCalendarXML = calendarDate.date
            //print("Found \(datesFromCalendarXML)") This prints dates parsed from XML file - See picture 1 below

            let visibleDatesToString = formatter.string(from: cellState.date)
            //print("Visible dates \(visibleDatesToString)") This prints all of the dates in the current month showing. So for September, it shows all of the dates in September. See picture 2 below

            // If there is a date match, then show a round blue border
            if datesFromCalendarXML == visibleDatesToString {

                cell.dateLabel.layer.cornerRadius = 25
                cell.dateLabel.layer.borderWidth = 3
                cell.dateLabel.layer.borderColor = UIColor.blue.cgColor
                cell.dateLabel.clipsToBounds = true

            // If there is no date match, show no border. I had set this to UIColor.clear.cgColor but then only the last datesFromCalendarXML Oct 30 showed as a blue, so I changed it to red and saw that random dates including the ones from the XML are being circled red.
            } else if datesFromCalendarXML != visibleDatesToString {
                cell.dateLabel.layer.borderColor = UIColor.red.cgColor
                cell.dateLabel.clipsToBounds = true
            }
}
}
}

//Mark: CalendarView Delegate
extension CalendarViewController: JTAppleCalendarViewDelegate {

func calendar(_ calendar: JTAppleCalendarView, cellForItemAt date: Date, cellState: CellState, indexPath: IndexPath) -> JTAppleCell {
    let cell = calendar.dequeueReusableJTAppleCell(withReuseIdentifier: "CalendarCell", for: indexPath) as! CalendarCell
    cell.dateLabel.text = cellState.text
    configureCalendarCell(cell:cell, cellState: cellState)
    return cell
}
}

这似乎只适用于 datesFromCalendarXML 中的最后一个值,因为 10 月 30 日显示为带有蓝色圆环。 XML 中的其他值,9 月 1 日、10 日、20 日和 10 月 1 日、10 日、20 日与其他随机日期一样显示为红色圆环。

在我的控制台中//print("Found (datesFromCalendarXML)"- /image/dYlYL.png

在我的控制台中//print("Visible dates (visibleDatesToString)") - /image/sbRtA.png

添加:

我试图将日期标签的颜色更改为绿色,无论出于何种原因,这只会使匹配的日期变为绿色,而不会随机添加其他绿色日期。我不知道为什么我可以更改 dateLabel.textColor 而不是背景 - https://imgur.com/a/St3b8ND

if datesFromCalendarXML == visibleDatesToString {
                cell.dateLabel.textColor = UIColor.green

            } else if datesFromCalendarXML != visibleDatesToString {

            }

最佳答案

问题是你的逻辑

对于 tableViewDataSource 中的 calendarDate {}

calendarDate 总是循环填充红色背景

假设你在日期 10,你的 xml 是:10,20,30

当日期 10 检查时,它循环填充背景蓝色,然后是红色,然后是红色

所以在 if datesFromCalendarXML == visibleDatesToString {} 中使用 break,这样它将在填充蓝色背景后停止

关于ios - 为什么我的 if string == else if != 语句只适用于数组中的最后一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52489202/

相关文章:

ios - 如何从 xml 提要上传 ios rss 提要表格单元格的缩略图

ios - 根据 UISwitch 位置更改 UITextView 的行为

ios - 以编程方式显示带有 Storyboard的 TabBarConroller

swift - iAd (ADBannerView) 工作,但在 Swift 中有奇怪的系统输出

ios - 是否有任何示例/示例可用于使用适用于 iOS 的 Google People API?

swift - 我的 "Messaging app"代码中的约束问题

ios - 获取粗体属性文本的 uilabel 高度

ios - tableView 不刷新

swift - VStack 中意外的 GeometryReader View 行为

swift - 我如何从函数返回值使用 Alamofire