SwiftUI - 类型 'Service' 不符合协议 'Decodable'
SwiftUI - Type 'Service' does not conform to protocol 'Decodable'
我正在构建的一个小应用程序上使用 SwiftUI,但我 运行 遇到了 Codable 的问题,并且遇到了一些错误。
我有一个 JSON 文件,看起来像这样
[
{
"id": "",
"name": "services",
"items": [
{
"id": 0
"businessName": "Some Name",
"businessTelephone": "01234567890",
"businessEmail": "email@gmail.com",
"businessWebsite": "website.com",
"businessLocation": { "latitude": "54.137256", "longitude": "-1.524727" },
"travelLimit": 50,
"description": "A description about some business",
"categories": ["Category 1"]
}
}
]
我有一个看起来像这样的结构
struct Service: Hashable, Codable, Identifiable {
var id: Int
var businessName: String
var businessTelephone: String
var businessEmail: String
var businessWebsite: String
var businessLocation: Array<Any>
var travelLimit: Int
var description: String
var categories: [Category]
enum Category: String, CaseIterable, Hashable, Codable {
case category1 = "Category 1"
case category2 = "Category 2"
}
}
但是,我收到以下错误
Type 'Service' does not conform to protocol 'Decodable'
Type 'Service' does not conform to protocol 'Encodable'
Type 'Service' does not conform to protocol 'Equatable'
Type 'Service' does not conform to protocol 'Hashable'
Codable
不能有 Any
,再加上 businessLocation
是字典而不是数组,所以 Replace
var businessLocation: Array<Any>
和
var businessLocation:[String:String]
或
型号
// MARK: - Element
struct Root: Codable {
let id, name: String
let items: [Item]
}
// MARK: - Item
struct Service: Codable {
let id: Int
let businessName, businessTelephone, businessEmail, businessWebsite: String
let businessLocation: BusinessLocation
let travelLimit: Int
let itemDescription: String
let categories: [String]
enum CodingKeys: String, CodingKey {
case id, businessName, businessTelephone, businessEmail, businessWebsite, businessLocation, travelLimit
case itemDescription = "description"
case categories
}
}
// MARK: - BusinessLocation
struct BusinessLocation: Codable {
let latitude, longitude: String
}
解码
do {
let res = try JSONDecoder().decode([Root].self, from: data)
print(res)
}
catch {
print(error)
}
我正在构建的一个小应用程序上使用 SwiftUI,但我 运行 遇到了 Codable 的问题,并且遇到了一些错误。
我有一个 JSON 文件,看起来像这样
[
{
"id": "",
"name": "services",
"items": [
{
"id": 0
"businessName": "Some Name",
"businessTelephone": "01234567890",
"businessEmail": "email@gmail.com",
"businessWebsite": "website.com",
"businessLocation": { "latitude": "54.137256", "longitude": "-1.524727" },
"travelLimit": 50,
"description": "A description about some business",
"categories": ["Category 1"]
}
}
]
我有一个看起来像这样的结构
struct Service: Hashable, Codable, Identifiable {
var id: Int
var businessName: String
var businessTelephone: String
var businessEmail: String
var businessWebsite: String
var businessLocation: Array<Any>
var travelLimit: Int
var description: String
var categories: [Category]
enum Category: String, CaseIterable, Hashable, Codable {
case category1 = "Category 1"
case category2 = "Category 2"
}
}
但是,我收到以下错误
Type 'Service' does not conform to protocol 'Decodable'
Type 'Service' does not conform to protocol 'Encodable'
Type 'Service' does not conform to protocol 'Equatable'
Type 'Service' does not conform to protocol 'Hashable'
Codable
不能有 Any
,再加上 businessLocation
是字典而不是数组,所以 Replace
var businessLocation: Array<Any>
和
var businessLocation:[String:String]
或
型号
// MARK: - Element
struct Root: Codable {
let id, name: String
let items: [Item]
}
// MARK: - Item
struct Service: Codable {
let id: Int
let businessName, businessTelephone, businessEmail, businessWebsite: String
let businessLocation: BusinessLocation
let travelLimit: Int
let itemDescription: String
let categories: [String]
enum CodingKeys: String, CodingKey {
case id, businessName, businessTelephone, businessEmail, businessWebsite, businessLocation, travelLimit
case itemDescription = "description"
case categories
}
}
// MARK: - BusinessLocation
struct BusinessLocation: Codable {
let latitude, longitude: String
}
解码
do {
let res = try JSONDecoder().decode([Root].self, from: data)
print(res)
}
catch {
print(error)
}