Ios 我正试图用swiftcodable从一个子Reddit解析JSON。为什么我的对象返回零?

Ios 我正试图用swiftcodable从一个子Reddit解析JSON。为什么我的对象返回零?,ios,swift,networking,codable,Ios,Swift,Networking,Codable,我正在用Swift解析子Reddit中的JSON。网址是:“ 对象正在返回nil和keyNotFound。我觉得我的嵌套可能不正确,或者网络调用有问题。是我的型号还是网络服务?谢谢 我的Reddit模型如下所示: import Foundation struct Model : Decodable { let data: Children } struct Children: Decodable { let children: [RedditData] } struct R

我正在用Swift解析子Reddit中的JSON。网址是:“ 对象正在返回
nil
keyNotFound
。我觉得我的嵌套可能不正确,或者网络调用有问题。是我的
型号
还是
网络服务
?谢谢

我的Reddit
模型
如下所示:

import Foundation

struct Model : Decodable {
    let data: Children
}

struct Children: Decodable {
    let children: [RedditData]
}

struct RedditData: Decodable {
    let data: SecondaryData
}

struct SecondaryData : Decodable {
    let selftext: String
    let preview: Images
}

struct Images: Decodable {
    let images: [Source]
}

struct Source: Decodable {
    let url: URL
}
import Foundation

class NetworkingService {

    static let shared = NetworkingService()
    private init() {}

    let session = URLSession.shared

    func getReddits(success successBlock: @escaping (Model) -> Void) {
        guard let url = URL(string: "https://www.reddit.com/r/swift/.json") else { return }
        let request = URLRequest(url: url)

        session.dataTask(with: request) { [weak self] data, _, error in
            guard self != nil else { return }

            if let error = error { print(error); return }
            do {
                let decoder = JSONDecoder()
                //decoder.keyDecodingStrategy = .convertFromSnakeCase

                let model = try decoder.decode(Model.self, from: data!)
                successBlock(model)
                print("model is \(model)")
            } catch {
                print(error)
            }
            }.resume()
    }
}
我的网络服务如下所示:

import Foundation

struct Model : Decodable {
    let data: Children
}

struct Children: Decodable {
    let children: [RedditData]
}

struct RedditData: Decodable {
    let data: SecondaryData
}

struct SecondaryData : Decodable {
    let selftext: String
    let preview: Images
}

struct Images: Decodable {
    let images: [Source]
}

struct Source: Decodable {
    let url: URL
}
import Foundation

class NetworkingService {

    static let shared = NetworkingService()
    private init() {}

    let session = URLSession.shared

    func getReddits(success successBlock: @escaping (Model) -> Void) {
        guard let url = URL(string: "https://www.reddit.com/r/swift/.json") else { return }
        let request = URLRequest(url: url)

        session.dataTask(with: request) { [weak self] data, _, error in
            guard self != nil else { return }

            if let error = error { print(error); return }
            do {
                let decoder = JSONDecoder()
                //decoder.keyDecodingStrategy = .convertFromSnakeCase

                let model = try decoder.decode(Model.self, from: data!)
                successBlock(model)
                print("model is \(model)")
            } catch {
                print(error)
            }
            }.resume()
    }
}
引发的错误:

keyNotFound(CodingKeys(stringValue: "url", intValue: nil), Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "data", intValue: nil), CodingKeys(stringValue: "children", intValue: nil), _JSONKey(stringValue: "Index 0", intValue: 0), CodingKeys(stringValue: "data", intValue: nil), CodingKeys(stringValue: "preview", intValue: nil), CodingKeys(stringValue: "images", intValue: nil), _JSONKey(stringValue: "Index 0", intValue: 0)], debugDescription: "No value associated with key CodingKeys(stringValue: \"url\", intValue: nil) (\"url\").", underlyingError: nil))
2019-08-02 06:13:59.068781-0400 Testing[65504:3994601] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C1.1:2][0x7f9814c0dc70] get output frames failed, state 8196
2019-08-02 06:13:59.068978-0400 Testing[65504:3994601] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C1.1:2][0x7f9814c0dc70] get output frames failed, state 8196
2019-08-02 06:13:59.069779-0400 Testing[65504:3994601] TIC Read Status [1:0x0]: 1:57
2019-08-02 06:13:59.069899-0400 Testing[65504:3994601] TIC Read Status [1:0x0]: 1:57

您缺少JSON的源属性

struct Images: Decodable {
    let images: [Image]
}

struct Image: Decodable {
    let source: Source
}

struct Source: Decodable {
    let url: URL
    let width: Int
    let height: Int
}

错误是什么,您在控制台中查看了吗?您今天不是已经问过了吗?显示使用错误代码更新的错误。谢谢,没错。为了工作,您还必须将
preview
设置为可选,因为某些项目没有它<代码>让我们预览:图像?