У меня есть общая структура данных Queue, в которой в качестве списка используется массив, мне трудно сделать так, чтобы очередь соответствовала кодируемой и декодируемой.У меня есть другой класс, который использует очередь, которая также должна быть Codable, но она не может быть coddle, если ее переменные-члены не являются.
Я попытался преобразовать очередь в кодируемую и декодируемую, кодируя данные и сохраняя их для пользователязначения по умолчанию, но это, похоже, не работает, фактически моя функция init (из декодера) даже по какой-либо причине застряла в бесконечном цикле.Я мог бы действительно использовать некоторую помощь
// Моя очередь
public struct Queue<T: Codable> {
private var dataSource = [T]()
private var userDefaults = UserDefaults()
public init() {}
public func isEmpty() -> Bool{
return dataSource.isEmpty
}
public mutating func enqueue( element: T){
dataSource.append(element)
}
public mutating func dequeue() -> T?{
return isEmpty() ? nil : dataSource.removeFirst()
}
public func peek() -> T? {
return isEmpty() ? nil : dataSource.first
}
public func getCount() -> Int {
return dataSource.count
}
public func printQueue(){
print(dataSource)
}
}
public enum Error: String, Swift.Error{
case queueNotFound = "Queue Not Found!"
}
extension Queue: Encodable, Decodable {
public func encode(to encoder: Encoder) throws
{
let jsonEncoder = JSONEncoder()
let encodedData = try jsonEncoder.encode(dataSource)
userDefaults.set(encodedData, forKey: "queue")
print(encodedData)
//var container = encoder.container(keyedBy: CodingKey.self)
}
public init(from decoder: Decoder) throws
{
print("intilaizing")
let jsonDecoder = JSONDecoder()
guard let data = userDefaults.data(forKey: "queue"), let _ = try? jsonDecoder.decode(Queue.self, from: data)
else {
throw Error.queueNotFound
}
}
Любой класс должен иметь возможность добавлять эту очередь в качестве члена данных, когда я реализую очередь, функция кодирования работает, я считаю,но декодер вызывает какой-то бесконечный цикл