Каждый раз, когда вы сохраняете уведомление с помощью этого кода, оно переопределяет текущее значение. Вот почему вы получили только последнее сообщение. Вы можете создать массив уведомлений и сохранить его в userDefaults. затем каждый раз, когда вы получаете новое уведомление, вы можете добавлять новое уведомление к текущему массиву уведомлений в UserDefaults
, сначала вы создаете кодируемый класс для уведомления
class FNotifications: Codable {
let fnotifications:[FNotification]
init(fnotifications:[FNotification]) {
self.fnotifications = fnotifications
}
}
class FNotification: Codable {
let id:String
let type:Int
let header:String
let description:String
let date:String
let badge:Int
var status: UInt8
init(id:String,type:Int,header:String,description:String,date:String,badge:Int,status:UInt8, recordID:String) {
self.id = id
self.type = type
self.header = header
self.description = description
self.date = date
self.badge = badge
self.status = status
}
}
, затем вы можете создать массив FNotification и сохраните его в userDefaults (только в первый раз, когда вы захотите создать массив. Во второй раз вы можете получить сохраненный массив и добавить к нему новое уведомление)
//define notification array when its first time
var notification: [FNotification] = []
//add new notification to array
notification.append(FNotification(id: "" ,type: "",header: "", description: "", date:"" , badge: 1, status: 1))
do{
//save to user defaults
UserDefaults.standard.set(try? PropertyListEncoder().encode(notification), forKey: "notifications")
UserDefaults.standard.synchronize()
}catch{
print(error)
}
После сохранения уведомления, используя этот способ, вы можете получить уведомление, как это
if let notiArray = UserDefaults.standard.object(forKey: "notifications") as? Data {
if notiArray.count != 0 {
notification = try! PropertyListDecoder().decode(Array<FNotification>.self, from: notiArray)
print("notification \(notification)")
}
}