簡體   English   中英

如何在 Swift 中訪問 GitHub API?

[英]How could you access the GitHub API in Swift?

我想通過 API 從 GitHub 中提取最新版本,然后比較標簽,從而在我的 macOS SwiftUI 應用程序中創建一個更新檢測系統。 我將如何從 Swift 訪問 API? 我已經嘗試使用這里、 medium.com這里、 swifttom.com這里 steveclarkapps.com 中的方法,但沒有一個能完成我想要做的事情。

對於第一種方法,代碼使用提供的示例 API 運行,但不適用於 GitHub API,而是返回此錯誤:

Fatal error: 'try!' expression unexpectedly raised an error: Swift.DecodingError.typeMismatch(Swift.Array<Any>, Swift.DecodingError.Context(codingPath: [], debugDescription: "Expected to decode Array<Any> but found a dictionary instead.", underlyingError: nil))

方法 2 遇到同樣的問題。

我什至無法獲得足夠的方法 3 的代碼來嘗試它。

這是我根據 medium.com 方法改編的代碼:

Model.swift

import Foundation

struct TaskEntry: Codable {
    let id: Int
    let tag_name: String
    let name: String
}

ContentView.swift

import SwiftUI

struct ContentView: View {
    @State var results = [TaskEntry]()
        
    var body: some View {
        List(results, id: \.id) { item in
            VStack(alignment: .leading) {
                Text(item.name)
            }
        }.onAppear(perform: loadData)
    }
    func loadData() {
        guard let url = URL(string: "https://api.github.com/repos/NCX-Programming/RNGTool/releases/latest") else {
            print("Invalid URL")
            return
        }
        let request = URLRequest(url: url)

        URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data {
                /*if*/ let response = try! JSONDecoder().decode([TaskEntry].self, from: data) /*{*/
                    DispatchQueue.main.async {
                        self.results = response
                    }
                    return
                /*}*/
            }
        }.resume()
    }
}

注釋掉看起來不相關的代碼和變量名只是剩下的。

操作系統: macOS Big Sur 11.6 Xcode 版本: 13.0

在瀏覽器中打開它:

https://api.github.com/repos/NCX-Programming/RNGTool/releases/latest

你會注意到它不是一個數組而是一個對象。 你應該像這樣解碼一個對象:

JSONDecoder().decode(TaskEntry.self, from: data)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM