美文网首页
SwiftUI Http请求处理

SwiftUI Http请求处理

作者: 张林建 | 来源:发表于2022-07-19 17:36 被阅读0次

对于SwiftUI中发送Http请求,写了一个处理类。以下代码,仅供参考。

import SwiftUI

struct Network{
    
    func httpGet<T:Codable>(from url:String,  complete:@escaping(T)->Void, onerror: @escaping (String)->Void){
        guard let urlUl = URL(string: url) else {
            print("missing url")
            onerror("missing url")
            return
        }
        
        let urlRequest = URLRequest(url: urlUl)
        
        let dataTask = URLSession.shared.dataTask(with: urlRequest){ (data, response, error) in
            if let error = error {
                print("request error:", error)
                onerror("request error: \(error)")
                return
            }
            guard let response  = response as? HTTPURLResponse else {return}
            
            if response.statusCode == 200{
                guard let data = data else {return}
                do{
                    let decoded = try JSONDecoder().decode(T.self, from: data)
                    complete(decoded)
                }catch let error{
                    print("error decoding:", error)
                    onerror("error decoding: \(error)")
                }
            }else{
                onerror("error occurred. status code: \(response.statusCode)")
            }
        }
        
        dataTask.resume()
    }
    
    func httpPost<T:Codable, R:Codable>(from url:String, request:R, complete: @escaping (T)->Void, onerror: @escaping (String)->Void){
        guard let urlUl = URL(string: url) else {
            print("missing url")
            onerror("missing url")
            return
        }
        
        guard let encoded = try? JSONEncoder().encode(request) else{
            print("encode request data error")
            onerror("encode request data error")
            return
        }
        
        var urlRequest = URLRequest(url: urlUl)
        urlRequest.httpMethod = "POST"
        urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
        
        
        let dataTask = URLSession.shared.uploadTask(with: urlRequest, from: encoded){ (data, response, error) in
            if let error = error {
                print("request error:", error)
                onerror("request error: \(error)")
                return
            }
            guard let response  = response as? HTTPURLResponse else {return}
            
            if response.statusCode == 200{
                guard let data = data else {return}
                do{
                    let decoded = try JSONDecoder().decode(T.self, from: data)
                    complete(decoded)
                }catch let error{
                    print("error decoding:", error)
                    onerror("error decoding: \(error)")
                }
            }else{
                onerror("error occurred. status code: \(response.statusCode)")
            }
        }
        
        dataTask.resume()
    }
}

相关文章

网友评论

      本文标题:SwiftUI Http请求处理

      本文链接:https://www.haomeiwen.com/subject/pzksirtx.html