SwiftUI - 如何每天洗牌一次数组?
SwiftUI - how to shuffle an array one time a day?
一天一次随机排列一组字符串的方法是什么?
并非每次应用程序都重新启动。
struct View: View {
@ObservedObject var quotes = Quotes()
var body: some View {
List {
ForEach(quotes.shuffled()) { quote in
Text(quote.quotes)
}
}
}
}
当我尝试 shuffled()
方法时,每次更新视图时,引号都会再次打乱,而且在重新启动应用程序时,我只想每天打乱数组一次。
您需要像用户默认值一样将当前日期存储在内存中,并像我在下面的代码中那样每次检查新日期。 isNewDay() 函数检查日期是否为新日期并将当前日期保存在用户默认值中。条件 isNewDay() ? quotes.shuffled() : quotes 仅当 date 是新的
时才打乱引号
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
}
}
}
一天一次随机排列一组字符串的方法是什么? 并非每次应用程序都重新启动。
struct View: View {
@ObservedObject var quotes = Quotes()
var body: some View {
List {
ForEach(quotes.shuffled()) { quote in
Text(quote.quotes)
}
}
}
}
当我尝试 shuffled()
方法时,每次更新视图时,引号都会再次打乱,而且在重新启动应用程序时,我只想每天打乱数组一次。
您需要像用户默认值一样将当前日期存储在内存中,并像我在下面的代码中那样每次检查新日期。 isNewDay() 函数检查日期是否为新日期并将当前日期保存在用户默认值中。条件 isNewDay() ? quotes.shuffled() : quotes 仅当 date 是新的
时才打乱引号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
}
}
}