gpt4 book ai didi

Swift 4 解码/编码通用数据结构

转载 作者:行者123 更新时间:2023-11-28 13:38:41 24 4
gpt4 key购买 nike

我有一个通用队列数据结构,它使用数组作为其列表,我很难使队列符合可编码和可解码。我有另一个使用队列的类,它也需要 Codable 但它不能被溺爱,除非它的成员变量是。

我已经尝试使队列符合可编码和可解码,对数据进行编码并将其保存为用户默认值,但这似乎不起作用,事实上我的 init(from decoder) 函数甚至陷入了无限循环原因。我真的需要一些帮助

//我的队列

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
}

}

任何类都应该能够将这个队列添加为数据成员,当我实现队列时,我相信编码函数可以工作,但解码器会导致一些无限循环

最佳答案

您正在编码 dataSource – 即 [T] – 但正在解码 Queue,这是行不通的。尝试

public init(from decoder: Decoder) throws
{
print("initializing")
guard let data = userDefaults.data(forKey: "queue") else { throw Error.queueNotFound }
dataSource = try JSONDecoder().decode([T].self, from: data)
}

顺便说一句,在您的代码中,解码值以及潜在的 DecodingError 未被使用,这是没有意义的。

关于Swift 4 解码/编码通用数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56305681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com