如何在Swift中加载远程JSON文件



我几乎是Swift的初学者。我玩过SwiftUI,但仅此而已。不用说,我不知道Swift中的类、结构、协议和其他一切是如何工作的。

我目前正试图弄清楚如何将JSON文件加载到Swift中,但我一辈子都无法让它发挥作用。我认为这样的东西对于这样一种现代语言来说是相当初级的,但显然不是。在尝试了多个教程和示例之后,我想出了这个混乱的代码:

public class JSONReader {
struct DatabaseObject: Decodable {
let name: String
let books: AnyObject
let memoryVerses: AnyObject
}
private func parse(jsonData: Data) {
do {
let decodedData = try JSONDecoder().decode(DatabaseObject.self, from: jsonData)
print(decodedData)
} catch {
print("decode error")
}
}
private func loadJson(fromURLString urlString: String,
completion: @escaping (Result<Data, Error>) -> Void) {
if let url = URL(string: urlString) {
let urlSession = URLSession(configuration: .default).dataTask(with: url) { (data, response, error) in
if let error = error {
completion(.failure(error))
}

if let data = data {
completion(.success(data))
}
}
urlSession.resume()
}
}
init() {
loadJson(fromURLString: "Redacted for privacy") { result in
switch result {
case .success(let data):
self.parse(jsonData: data)
case .failure(let error):
print(error)
}
}
}
}

我一直收到构建时间错误Type 'JSONReader.DatabaseObject' does not conform to protocol 'Decodable'

任何帮助、建议或提示都将不胜感激!

类型AnyObject不可由swift解码,您试图解码的books属性和memoryVerse不可解码,如果您想解码,您可以将它们的类型单独定义为可编码结构,如

struct Book : Codable{
let property : String
let otherProperty : String
}
struct Memory : Codable{
let property : String
let otherProperty : String
}
struct DatabaseObject: Decodable {
let name: String
let books: Book
let memoryVerses:Memory
}

最新更新