gpt4 book ai didi

ios - 具有继承的类可编码

转载 作者:搜寻专家 更新时间:2023-11-01 06:49:54 29 4
gpt4 key购买 nike

我正在尝试下面的代码,但它抛出异常

import Foundation

class SomeBaseClass: Codable {
let someInt: Int?
let someString: String?

init(someInt: Int,someString:String) {
self.someInt = someInt
self.someString = someString
}

init(someBaseClass: SomeBaseClass) {
self.someString = someBaseClass.someString
self.someInt = someBaseClass.someInt
}
}

class Person: SomeBaseClass {
let firstName: String?
let lastName: String?

init(firstName: String,lastName:String,someBaseClass: SomeBaseClass) {
self.firstName = firstName
self.lastName = lastName

super.init(someBaseClass: someBaseClass)
}

enum CodingKeys: String, CodingKey {
case firstName,lastName
}

required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)

firstName = try container.decode(String.self, forKey: .firstName)
lastName = try container.decode(String.self, forKey: .lastName)

try super.init(from: container.superDecoder())
}

}

let json = """
{
"firstName":"John",
"someInt":2

}
"""

let jsonData = json.data(using: .utf8)!

do {
let personObject = try JSONDecoder().decode(Person.self, from: jsonData)
dump(personObject)
} catch let error as NSError {
print(error)
}

它因以下错误而崩溃

Error Domain=NSCocoaErrorDomain Code=4865 "No value associated with key CodingKeys(stringValue: "lastName", intValue: nil) ("lastName")." UserInfo={NSDebugDescription=No value associated with key CodingKeys(stringValue: "lastName", intValue: nil) ("lastName")., NSCodingPath=( )}

我知道 JSON 中缺少 lastName,我已将其标记为可选,但它的工作方式与结构不同

有没有简单的方法可以做到这一点?

最佳答案

你应该为你的可选属性使用decodeIfPresent

required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
firstName = try container.decodeIfPresent(String.self, forKey: .firstName)
lastName = try container.decodeIfPresent(String.self, forKey: .lastName)

try super.init(from: decoder)
}

另请注意为避免另一个错误而需要对 super 的更改。您也可以从

} catch let error as NSError {
print(error)
}

简单地

} catch {
print(error)
}

关于ios - 具有继承的类可编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58234362/

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