SwiftUI - 如何每天洗牌一次?

Posted

技术标签:

【中文标题】SwiftUI - 如何每天洗牌一次?【英文标题】:SwiftUI - how to shuffle an array one time a day? 【发布时间】:2021-01-01 05:10:36 【问题描述】:

每天洗牌一次字符串数组的方法是什么? 而且不是每次应用重新启动时。

struct View: View 
    @ObservedObject var quotes = Quotes()
    var body: some View 
        List 
            ForEach(quotes.shuffled())  quote in
                Text(quote.quotes)
            
        
    

当我在每次更新视图时尝试 shuffled() 方法时,引号会再次被打乱,同样在重新启动应用程序时,我想每天只打乱数组一次。

【问题讨论】:

【参考方案1】:

您需要像用户默认值一样将当前日期存储在内存中,并且每次都检查新日期,就像我在下面的代码中一样。 isNewDay() 函数检查日期是否为新日期并将当前日期保存在用户默认值中。条件 isNewDay() ? quote.shuffled() : 引号 仅当日期为新时才打乱引号

struct View :View
    @ObservedObject var quotes = Quotes()
    var body :some View
    List 
            ForEach(isNewDay() ? quotes.shuffled() : quotes) quote in 
              Text(quote.quotes)
            
        
        
    

    func isNewDay()-> Bool
    
        let currentDate = Date()
    
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "MM/dd/yyyy"

        let currentDateString = dateFormatter.string(from: currentDate)
    
        if let lastSaved  = UserDefaults.standard.string(forKey: "lastDate")// last saved date
        
        
            if lastSaved == currentDateString
                    return true
                else
            
                    UserDefaults.standard.setValue(currentDateString, forKey: "lastDate")
                    return false
            
                
        else
        
            UserDefaults.standard.setValue(currentDateString, forKey: "lastDate")
         return false
        
    

【讨论】:

以上是关于SwiftUI - 如何每天洗牌一次?的主要内容,如果未能解决你的问题,请参考以下文章

更改选项卡式视图栏颜色 SwiftUI

按返回键“不”关闭软件键盘 - SwiftUI

Catalyst 'SwiftUI.AccessibilityNode' 不是已知的可序列化元素

SwiftUI 中的 List 是不是复用类似于 UITableView 的单元格?

SwiftUI:如何根据日期每天显示一个新视图,而以前的视图持续一周

如何在洗牌的连续整数数组中找到重复元素?