1. 程式人生 > >swift 使用AFNetWorking 進行網路請求

swift 使用AFNetWorking 進行網路請求

1. 

pod 'AFNetworking', '~> 3.1.0'

2.

建立網路請求工具 繼承於NSObject

import AFNetworking


enum FMResult {

    case FMData

    case FMJSON

    case FMXML

}

enum FMRequestStyle {

    case FMRequestJSON

    case FMRequestString

}

class FLGAFNetWorkingTool: NSObject {

     Get請求

    func getUrl(url:String

,body:Any,result:FMResult,headerFile:NSDictionary,finished :@escaping (_ result : AnyObject?, _ error : Error?)-> ()){

        let manager = AFHTTPSessionManager()

        if headerFile.count != 0 {

            for str in headerFile{

                manager.requestSerializer.setValue(str.value as

? String, forHTTPHeaderField: str.key as! String)

            }

        }

        switch result {

        case .FMData:

            manager.responseSerializer = AFHTTPResponseSerializer()

            break

        case .FMJSON:

            manager.responseSerializer = AFJSONResponseSerializer()

            break

        case .FMXML:

            manager.responseSerializer = AFXMLParserResponseSerializer()

            break

        }

        manager.responseSerializer.acceptableContentTypes = ["application/json", "text/json", "text/javascript","text/html","text/css","text/plain"]

        manager.get(url, parameters: body, progress: nil, success: { (task :URLSessionDataTask?, result : Any?) in

            finished(result as AnyObject?, nil)

        }) { (task : URLSessionDataTask?, error :Error?) in

            finished(nil, error)

        }

    }

      post請求

    func postUrl(url:String,body:Any,result:FMResult,requsetStyle:FMRequestStyle,headerFile:NSDictionary,finished :@escaping (_ result : AnyObject?, _ error : Error?)-> ()){

        let manager = AFHTTPSessionManager()

//3.傳送資料型別

        switch requsetStyle {

        case .FMRequestJSON:

            manager.responseSerializer = AFJSONResponseSerializer()

            break

        case .FMRequestString:

            manager.requestSerializer.setQueryStringSerializationWith({ (request:URLRequest, parameters:Any, error:NSErrorPointer) -> String in

                return parameters as! String

            })

            break

        }

//4.給網路請求新增請求頭///可能會用到

        if headerFile.count != 0 {

            for str in headerFile{

                manager.requestSerializer.setValue(str.value as? String, forHTTPHeaderField: str.key as! String)

            }

        }

//5.網路請求返回值的型別

        switch result {

        case .FMData:

            manager.responseSerializer = AFHTTPResponseSerializer()

            break

        case .FMJSON:

            manager.responseSerializer = AFJSONResponseSerializer()

            break

        case .FMXML:

            manager.responseSerializer = AFXMLParserResponseSerializer()

            break

        }

//2.設定網路請求返回值支援的引數型別

        manager.responseSerializer.acceptableContentTypes = ["application/json", "text/json", "text/javascript","text/html","text/css","text/plain"]

        manager.post(url, parameters: body, progress: nil, success: { (task :URLSessionDataTask?, result : Any?) in

            finished(result as AnyObject?, nil)

        }) { (task : URLSessionDataTask?, error :Error?) in

            finished(nil, error)

        }

    }

}


3. 呼叫方法

//// 獲取資料=====)

    func getTopicVideosLieBiao(tag:NSString,withStart: NSInteger, withLimit: NSInteger,finished :@escaping (_ result : FLGTopicZuoPinModel?, _ error : Error?)-> ()){

        let tool = FLGAFNetWorkingTool()

        let url = String(format:"%@/video/getVideosByActivityTag?activityTag=%@&type=0&start=%ld&limit=%ld",arguments:[BASEADDRESS,tag,withStart,withLimit])

/// 網址中有中文的處理

        let urlinput = url.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)

        tool.getUrl(url: urlinput!, body: [:], result:FMResult.FMJSON , headerFile: [:]){ (result:AnyObject?, error:Error?) in

            if error != nil{

                finished(nil, error)

            }else{

                let jsonDic = result as! NSDictionary

                /// 字典轉model。。。swift推薦HandyJSON

                let model = FLGHotAutherModel.deserialize(from: jsonDic)

                finished(model, nil)

            }

        }

    }

HandyJSON的使用

pod 'HandyJSON', '~> 4.0.0-beta.1'


建立一個model檔案  繼承自nsobject

import UIKit

import HandyJSON

struct FLGHotAutherBody: HandyJSON {

    var nicName: String?

    var header: String?

    var id: Int?

    var sex: Int?

}

class FLGHotAutherModel: HandyJSON(此處直接把NSObject替換掉) {

    var customMessage: String?

    var customCode: String?

    var state: Bool?

var body: [FLGHotAutherBody]?(表示body裡面是陣列)

   var body: FLGHotAutherBody?(表示body裡面是字典)

required init() {}

}


相關推薦

swift 使用AFNetWorking 進行網路請求

1.  pod 'AFNetworking', '~> 3.1.0' 2. 建立網路請求工具 繼承於NSObject import AFNetworking enum FMResult {     case FMData     case FMJSON

使用AFNetworking 3.0庫進行網路請求時,取消單個佇列和全部佇列的方法(取消網路請求)

        專案中有時會有這種情況,當介面正在請求資料,但資料為返回之前。返回到上一個介面,這種情況下,應取消此介面的網路請求。此篇就是為了處理此種情況下的操作,可        以取消單個請求佇

android中Okhttp框架進行網路請求的工具類()

package com.example.utils; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Iterat

智慧廚房重構-Retrofit和RxJava進行網路請求

上一篇部落格智慧廚房重構-MVP架構中我們簡單談了一下MVP的使用方法,使用MVP介面的方式讓我們的程式碼已經很簡單明瞭了,但是我告訴你還不夠,使用了本篇的Retrofit和RxJava後讓你的程式碼美如畫。對,就是美如畫。 1.Retrofit的簡單介紹

關於retrofit進行網路請求時發生的奇怪錯誤

在我們進行的網路請求中,伺服器得到的資料是亂的,具體混亂格式及情況如下: 1.api介面如下: 2.建立retrofit例項: 3.網路工具類的單例化 4.提供一個對外的方法 5.在activity裡面呼叫api及網路工具類 然後我們傳入一個map集合到getal

Httpurlconnection進行網路請求+ListView

Httpurlconnection進行網路請求+ListView** 第一步:找控制元件設定值監聽在MainActivity中 protected void onCreate(Bundle savedInstanceStat

RN中使用fetch進行網路請求的幾種場景和姿勢

1. 對於標準的輸入json body的請求,我們需要使用json.stringify轉換之然後放入body.2. 對於application/x-www-form-urlencode格式的請求介面,我

RxAndroid+OKHttp進行網路請求

Rx(Reactive Extensions)指響應式程式設計,本質是觀察者模式,是以觀察者和訂閱者為基礎的非同步響應方式,它是一種程式設計思想的突破。 Rxandroid有四個基本的概念:Observable(被觀察者)、Observer(觀察者)、subscribe

moya + RxSwift 進行網路請求

1.關於moya 如在OC中使用AFNetworking一般,Swift我們用Alamofire來做網路庫.而Moya在Alamofire的基礎上又封裝了一層: 官方說moya有以下特性(我也就信了): 編譯時檢查正確的API端點訪問. 使你定義不同

利用Handler進行網路請求

上一篇理解了Android系統中Handler的機制,見Android中的Handler機制解析,那麼我們就來用Handler製作一個簡易的網路請求框架。 如下圖: 解釋一下:UI在request的時候傳入UI中的Handler,同時將請求的Runnab

requests進行網路請求與urllib2進行網路請求進行比較

同一臺計算機,同一個環境下,獲取LOL貼吧前二十頁內容,urllib2用時18.8280000687,而採用requests進行網路請求耗14.8680000305。綜上來講,選用第三方的requests進行網路請求效率比較高。但是,依然不夠好,如果我們採用,多

Android使用Retrofit進行網路請求

Retrofit 簡介 用於Android和Java平臺的一款型別安全的HTTP客戶端,通過一個Java介面實現HTTP請求物件,如下: public interface Github { @GET("/repos/{owner}/{repo}/

RxVolley進行網路請求(get方式),獲取json資料

1、新增依賴:  compile 'com.kymjs.rxvolley:rxvolley:1.1.4'//在app 下的build.gradle 裡 2、聚合資料申請微信精選介面,獲取APP-

OkHttpClient 進行網路請求

package com.example.mvpdemotwo.modle; import android.util.Log; import android.widget.Toast; import com.example.mvpdemotwo.MainActivity; i

使用Kotlin進行網路請求+Glide載入圖片

compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.1.7' compile 'com.squareup.retrofit2:retrofit:2.3.0

AFNetworking進行https請求遇到的錯誤和解決方式

1、錯誤一:Error Domain=NSURLErrorDomain Code=-999 請求取消。 導致原因:1、//一個頁面沒有被完全載入之前收到下一個請求,此時迅速會出現此error,erro

通過代理模式,對第三方網路請求框架進行封裝,實現任意切換網路框架

 最近在網上學習了一篇課程,講的是通過代理模式對第三方框架進行封裝。 感覺講的很不錯,受益良多,特此記錄。 首先什麼是代理模式? 代理模式就是:為其他物件提供一種代理,以控制對這個物件的訪問。 舉個例子:沒空下去吃飯,找個同事幫忙買飯就是代理模式;平常租房子, 嫌麻

Swift網路請求庫Alamofire

Alamofire由cnoon大神編寫的基於swift的網路請求庫 Github下載地址 [TOC] 執行限制: iOS 8.0+ / Mac OS X 10.9+ / tvOS 9.0+ / watchOS 2.0+ Xcode 7.3+ Cocoa

Swift使用Alamofire實現網路請求

  Alamofire是一個用Swift編寫的HTTP網路庫,由此前熱門開源專案AFNetworking的的作者mattt開發,可非常簡單地用於非同步網路通訊。 要獲取最新版本的 Alamofire,前往https://github.com/Alamofire/Alamofire然後單擊網頁右邊

Android中的Https網路請求get和post 不進行認證

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer)是通過證書認證、資料加密打造的一條安全的HTTP通道,也就是安全版HTTP,一般在金融行業用到的比