#ios #arrays #swift #swiftui #shuffle
#iOS #массивы #swift #swiftui #перетасовка
Вопрос:
Каков подход к перетасовке массива строк один раз в день? И не каждый раз, когда приложение перезапускается.
struct View: View {
@ObservedObject var quotes = Quotes()
var body: some View {
List {
ForEach(quotes.shuffled()) { quote in
Text(quote.quotes)
}
}
}
}
Когда я пробую этот shuffled()
метод каждый раз, когда обновляется представление, кавычки снова перетасовываются, также при повторном запуске приложения я хочу перетасовывать массив только один раз в день.
Ответ №1:
Вам нужно сохранить текущую дату в памяти, как пользователь по умолчанию, и каждый раз проверять наличие новой даты, как у меня в коде ниже. Функция isNewDay() проверяет, является ли дата новой, и сохраняет текущую дату в пользовательских настройках по умолчанию. Условие isNewDay() ? кавычки.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
}
}
}