gpt4 book ai didi

json - SwiftUI - 类型 'Service' 不符合协议(protocol) 'Decodable'

转载 作者:行者123 更新时间:2023-11-28 13:32:48 25 4
gpt4 key购买 nike

我在我正在构建的一个小应用程序上尝试使用 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)
}

关于json - SwiftUI - 类型 'Service' 不符合协议(protocol) 'Decodable',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57094606/

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