You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中@Published变量更新但Text视图不刷新问题

解决SwiftUI中切换星期几视图不刷新的问题

核心问题分析

  1. weekdayAsString函数逻辑错误:函数内部没有使用传入的date参数,而是每次调用Date().dayNumberOfWeek()获取当前真实日期的星期数,导致无论currentWeekday怎么变化,返回的字符串始终是当前真实日期的星期,视图无法正确展示切换结果。
  2. 星期数边界未处理:直接对currentWeekday加减会出现超出0-6范围的情况(如-1、7),导致后续显示异常。

修正后的完整代码

1. Date扩展(保持原逻辑)

extension Date {
    func dayNumberOfWeek() -> Int? {
        return Calendar.current.dateComponents([.weekday], from: self).weekday! - 1
    }
}

2. 修复星期数转字符串的函数

func weekdayAsString(date: Int) -> String {
    switch date { // 改用传入的参数作为判断依据
        case 0: return "Sunday"
        case 1: return "Monday"
        case 2: return "Tuesday"
        case 3: return "Wednesday"
        case 4: return "Thursday"
        case 5: return "Friday"
        case 6: return "Saturday"
        default: return ""
    }
}

3. 优化日期管理类

class GrabCurrentDate: ObservableObject {
    @Published var currentWeekday = Date().dayNumberOfWeek()!
    
    // 切换至前一天,处理边界循环
    func previousDay() {
        currentWeekday = currentWeekday == 0 ? 6 : currentWeekday - 1
    }
    
    // 切换至后一天,处理边界循环
    func nextDay() {
        currentWeekday = currentWeekday == 6 ? 0 : currentWeekday + 1
    }
}

4. 修正后的视图代码

struct testView: View {
    @ObservedObject var currentDate = GrabCurrentDate()

    var body: some View {
        HStack {
            Image(systemName: "arrow.left")
                .onTapGesture {
                    currentDate.previousDay()
                    print(currentDate.currentWeekday)
                }
            Text(weekdayAsString(date: currentDate.currentWeekday))
            
            Image(systemName: "arrow.right")
                .onTapGesture {
                    currentDate.nextDay()
                }
        }
    }
}

修复说明

  1. 修复weekdayAsString的参数使用问题后,函数会根据currentWeekday的更新返回对应星期字符串,触发视图自动刷新。
  2. 新增previousDay和nextDay方法,确保currentWeekday始终保持在0-6的有效范围内,避免无效值导致的显示异常。
  3. 移除视图中重复定义的weekdayAsString函数,简化代码结构。

内容的提问来源于stack exchange,提问作者Swink

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:35:26