如何与Swift进行API通话?

问题描述 投票:0回答:1
因此,我正在练习尝试与Swift进行API通话。代码如下:

struct Example: Codable { let userID: String let ID: String let title: String let completed: String } func getJson(completion: @escaping (Example)-> ()) { let urlString = "https://jsonplaceholder.typicode.com/todos/1" if let url = URL(string: urlString) { URLSession.shared.dataTask(with: url) {data, res, err in if let data = data { let decoder = JSONDecoder() if let json: Example = try? decoder.decode(Example.self, from: data) { completion(json) } } }.resume() } } getJson() { (json) in print(json.ID) }
,无论如何,我无法打印出任何东西。
我使用的示例API找到了

Herey。 我用来帮助我编写代码的教程已找到代码。 将您的变量名称和数据类型完全按照您的API响应进行了修改。 struct Example: Codable { let userId: Int let id: Int let title: String let completed: Bool } func getJson(completion: @escaping (Example)-> ()) { let urlString = "https://jsonplaceholder.typicode.com/todos/1" if let url = URL(string: urlString) { URLSession.shared.dataTask(with: url) {data, res, err in if let data = data { let decoder = JSONDecoder() do { let json: Example = try! decoder.decode(Example.self, from: data) completion(json) }catch let error { print(error.localizedDescription) } } }.resume() } } getJson() { (json) in print(json.id) }

您还可以使用CodingKey,并可以在初始化期间更改您的响应。
swift xcode api
1个回答
2
投票

import UIKit

class ApiManager: NSObject {
     static func postApiRequest(url: String,parameters:[String: Any],completion: @escaping([String: Any])-> Void) {
        let session = URLSession.shared
        let request = NSMutableURLRequest(url: NSURL(string: url)! as URL)
        request.httpMethod = "POST"
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        do{
            request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: JSONSerialization.WritingOptions())
            let task = session.dataTask(with: request as URLRequest as URLRequest, completionHandler: {(data, response, error) in
                if let response = response {
                    let nsHTTPResponse = response as! HTTPURLResponse
                    let statusCode = nsHTTPResponse.statusCode
                    print ("status code = \(statusCode)")
                }
                if let error = error {
                    print ("\(error)")
                }
                if let data = data {
                    do{
                        let jsonResponse = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions())
                        print ("data = \(jsonResponse)")
                    }catch _ {
                        print ("OOps not good JSON formatted response")
                    }
                }
            })
            task.resume()
        }catch _ {
            print ("Oops something happened buddy")
        }
        
    }
}

   

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.