SwiftUI-GitHub REST API中的JSON无法解析

SwiftUI-GitHub REST API中的JSON无法解析,json,swift,swiftui,github-api,Json,Swift,Swiftui,Github Api,我正在尝试使用GitHub的RESTAPI在SwiftUI中创建一个应用程序。我试图只检索给定用户追随者的登录名和个人资料图片,然后填充列表 FollowersView.swift 代码进入打印(“获取失败:\(错误?.localizedDescription??“未知错误”)”并在崩溃前打印“未知错误”。在检查返回的数据时,它什么也没有发现,至少我说不出来。(我不完全习惯Xcode调试器)。我仔细检查了浏览器中的API响应、浏览器中响应中的字段以及可编码结构中属性的名称是否匹配。所以,我不确定

我正在尝试使用GitHub的RESTAPI在SwiftUI中创建一个应用程序。我试图只检索给定用户追随者的登录名和个人资料图片,然后填充
列表

FollowersView.swift


代码进入
打印(“获取失败:\(错误?.localizedDescription??“未知错误”)”
并在崩溃前打印“未知错误”。在检查返回的数据时,它什么也没有发现,至少我说不出来。(我不完全习惯Xcode调试器)。我仔细检查了浏览器中的API响应、浏览器中响应中的字段以及可编码结构中属性的名称是否匹配。所以,我不确定这里到底发生了什么。如果我正确理解了您的问题,有没有关于如何解决此问题的建议?

。更新您的
Codable
,如下所示:

import Foundation

// MARK: - FollowerElement
struct FollowerElement: Codable {
    let login: String
    let id: Int
    let nodeID: String
    let avatarURL: String
    let gravatarID: String
    let url, htmlURL, followersURL: String
    let followingURL, gistsURL, starredURL: String
    let subscriptionsURL, organizationsURL, reposURL: String
    let eventsURL: String
    let receivedEventsURL: String
    let type: String
    let siteAdmin: Bool

    enum CodingKeys: String, CodingKey {
        case login, id
        case nodeID = "node_id"
        case avatarURL = "avatar_url"
        case gravatarID = "gravatar_id"
        case url
        case htmlURL = "html_url"
        case followersURL = "followers_url"
        case followingURL = "following_url"
        case gistsURL = "gists_url"
        case starredURL = "starred_url"
        case subscriptionsURL = "subscriptions_url"
        case organizationsURL = "organizations_url"
        case reposURL = "repos_url"
        case eventsURL = "events_url"
        case receivedEventsURL = "received_events_url"
        case type
        case siteAdmin = "site_admin"
    }
}

typealias Follower = [FollowerElement]
您可以从上述代码中删除不需要的属性

现在更新您的
dataTask
方法

URLSession.shared.dataTask(with: request) { data, response, error in
        
        if let error = error {
            print("Fetch failed: \(error.localizedDescription)")
        } else {
            if let data = data {
                
                do {
                    let follower = try JSONDecoder().decode(Follower.self, from: data)
                        DispatchQueue.main.async {
                            print(follower.count)
                        }
                    
                } catch {
                    print(error)
                }
            }
        }
        
    }.resume()

“代码开始打印”它打印什么?它打印“未知错误”好的,我知道问题出在哪里了,谢谢。有两个问题。首先,您没有if/else,因此即使没有下载错误,您也会打印下载错误。其次,您说的是try?因此,如果有解码错误(而且确实有),你就扔掉你需要的信息。改用try/catch并打印错误。这解决了我的问题。非常感谢你!我很感激!
URLSession.shared.dataTask(with: request) { data, response, error in
        
        if let error = error {
            print("Fetch failed: \(error.localizedDescription)")
        } else {
            if let data = data {
                
                do {
                    let follower = try JSONDecoder().decode(Follower.self, from: data)
                        DispatchQueue.main.async {
                            print(follower.count)
                        }
                    
                } catch {
                    print(error)
                }
            }
        }
        
    }.resume()