1. 程式人生 > >swift 常用網路請求框架 Alamofire

swift 常用網路請求框架 Alamofire

let url="\(BASEURL)"+LUNBOURL

    let image:UIImage=UIImage.init(named:"bannerhomeOne")!

    //獲取資料

    func normalGetData()  {

 //get--01--response

    Alamofire.request(url).response { (returnResult)in

    if let data = returnResult.data,let utf8Text =String(data: data, encoding: .utf8) {

    print(" utf8Text =\(utf8Text)")

    }

    }

//    get--02---responseData

        Alamofire.request(url).responseData { (returnResult)in

            debugPrint(" returnResult =\(returnResult)")

            if let data = returnResult.data,let utf8Text =String(data: data, encoding: .utf8) {

                print(" utf8Text =\(utf8Text)")

            }

        }

  //get--03--responseString

        Alamofire.request(url).responseString { (returnResult)in

            debugPrint(" Sucess =\(returnResult.result.isSuccess)")

            print(" returnResult =\(returnResult)")

        }

   //get --04--responseJSON

        Alamofire.request(url).responseJSON { (returnResult)in

            debugPrint("responseJSON -->\(returnResult)")

            if let json = returnResult.result.value {//這個轉換的json資料比較正規

                print("responseJSON -->\(json)")

                /*  返回請求地址、資料、和狀態結果等資訊

                 print(" responseJSON() --> \(returnResult.request!)")

                 print("responseJSON() --> \(returnResult.data!)")

                 print(" responseJSON() --> \(returnResult.result)")

                 */

            }

        }

//        get--05---queue

//         補充:1.引數:queue:請求佇列 --> 就是預設在主執行緒中執行~我們可以自定義排程佇列。

//         官方解釋:Response handlers by default are executed on the main dispatch queue. However, a custom dispatch queue can be provided instead.

        let customQueue = DispatchQueue.global(qos: .utility)

        Alamofire.request(url).responseJSON(queue: customQueue) { (returnResult)in

            print("請求佇列 -->\(returnResult)")

        }

   //get---06帶請求頭設定獲取資料

                let headers: HTTPHeaders = [

                    "Accept":"application/json"//設定客戶端以什麼格式解析伺服器返回的資料

                ]

                Alamofire.request(url, headers: headers).responseJSON { (returnResult)in

                    print("獲取資料並設定請求頭 --> returnResult =\(returnResult)")

                }

            }

  //GET請求---無引數

    func getData()  {

        Alamofire.request(url, method: .get).responseJSON { (returnResult)in

            print("GET 請求無引數 --> returnResult =\(returnResult)")

        }

    }

 //POST請求----無引數

    func postData(){

        Alamofire.request(url, method: .post).responseJSON { (returnResult)in

            print("POST 請求無引數 --> returnResult =\(returnResult)")

        }

    }

 //POST請求有引數

    func postDataWithParams() {

        let param = [String:String]()

        Alamofire.request(url, method: .post, parameters: param).responseJSON { (returnResult)in

            print(" POST 請求有引數引數 --> returnResult =\(returnResult)")

        }

    }

 //   URLRequest的方式請求

    func URLRequestWidth() {

        let urls = URL(string: url)

        var urlRequest = URLRequest(url: urls!)

        urlRequest.httpMethod = "POST"

                let param = ["type":"","key":""]

                do {

                    urlRequest.httpBody = try JSONSerialization.data(withJSONObject: param, options: [])

                } catch {

                    print(error)

                }

        urlRequest.setValue("application/json", forHTTPHeaderField:"Content-Type")

        Alamofire.request(urlRequest).responseData { (returnResult)in

            debugPrint(returnResult)

            if let data = returnResult.data,let utf8Text = String(data: data, encoding: .utf8) {

                print(" URLRequest請求方式 --> utf8Text =\(utf8Text)")

            }

        }

    }

//下載不帶進度

    func download() {

        // 1.下載圖片

        Alamofire.download(url).responseData { (returnResult)in

            if let data = returnResult.result.value {

                let image = UIImage(data: data)

                print("image =\(image!)")

            } else {

                print("下載失敗")

            }

        }

    }

 //下載帶進度

    func downoadWithProgress() {

    Alamofire.download(url).downloadProgress { (progress)in

    print("下載進度 =\(progress.fractionCompleted)")

    }.responseData { (returnResult) in

    if let data = returnResult.result.value {

    let image = UIImage(data: data)

    print("image =\(image!)")

    } else {

    print("下載失敗")

    }

    }

    }

 //uploadData----上傳data資料

    func uploadData()  {

        let imageData =UIImagePNGRepresentation(image)!

        Alamofire.upload(imageData, to: url).responseJSON { response in

            debugPrint(response)

        }

    }

 //uploadFile----上傳檔案

    func uploadFile()  {

        let fileURL = Bundle.main.url(forResource:"video", withExtension:"mov")

        Alamofire.upload(fileURL!, to: url).responseJSON { response in

            debugPrint(response)

        }

    }

 //uploadMultiFormData----上傳多個表單資料

    func uploadMultiFormData()  {

        Alamofire.upload(

            multipartFormData: { multipartFormData in//新增多個表單資料是吧本地url傳上去

//                multipartFormData.append(unicornImageURL, withName: "unicorn")

//                multipartFormData.append(rainbowImageURL, withName: "rainbow")

        },

            to: url,

            encodingCompletion: { encodingResult in

                switch encodingResult {

                case .success(let upload,_,_):

                    upload.responseJSON { responsein

                        debugPrint(response)

                    }

                case .failure(let encodingError):

                    print(encodingError)

                }

        }

        )

    }

 //上傳帶進度條

    func uploadWithProgress() {

        let fileURL = Bundle.main.url(forResource:"video", withExtension:"mov")

        Alamofire.upload(fileURL!, to: url)

            .uploadProgress { progress in // main queue by default

                print("Upload Progress:\(progress.fractionCompleted)")

            }

            .downloadProgress { progress in // main queue by default

                print("Download Progress:\(progress.fractionCompleted)")

            }

            .responseJSON { response in

                debugPrint(response)

        }

    }