美文网首页
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