当前位置: 首页 > 工具软件 > Alamofire > 使用案例 >

Alamofire 框架封装与使用

勾裕
2023-12-01

1. Alamofire github 地址: Alamofire​​​​​​​​​​​​​​
2. 终端切换到项目文件夹, 执行指令 pod init , 项目文件夹中, 打开 Podfile 文件,写入库名称

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target '测试-01-Alamofire' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for 测试-01-Alamofire
  pod 'Alamofire'
end

3. 回到终端,输入指令 pod search Alamofire -> pod help -> pod install --no-repo-update, 下载完成库
4. 测试请求方法

    /// 网络请求
    /// - Parameters:
    ///   - method: GET / POST
    ///   - URLString: URLString
    ///   - parameters: 参数字典
    ///   - finished: 完成回调
    private func request(method: HTTPMethod, URLString: String, parameters: [String: Any]?, finished: @escaping requestCallBack){
        AF.request(URLString, method: method, parameters: parameters).responseJSON{ response in
            switch response.result{
            case let .success(data):
                finished(data,nil)
                break
            case let .failure(error):
                finished(nil,error)
                break
            }
        }
    }

5. 测试上传文件方法

///上传文件
    private func upload(URLString: String, data: Data, name: String,  parameters: [String: Any]?, finished: @escaping requestCallBack){
        
        var parameter = parameters
        //如果追加 token 失败,直接返回
        if !appendToken(parameters: &parameter){
            // token 无效
            finished(nil,NSError(domain: "cn.cast.error", code: -1001, userInfo: ["message":"token 为空"]))
            return
        }
        
        /**
          1. data 要上传文件的二进制
          2. name 是服务器定义的字段名称 - 后台接口文档会提示
          3. fileName 是保存在服务器的文件名,但是:现在通常可以随便写,后台会做一些处理
            - 根据上传的文件,生成 缩略图,中等图,高清图
            - 保存在不同路径,并且自动生成文件名
            - fileName 是 HTTP 协议定义的属性
              
          4. mimeType  / contentType: 客户端通知服务器,二进制数据的准确类型
            - 大类型 / 小类型
              * image/gif  image/jpg image/png
              * text/plain text/html
              * application/json
            - 服务器不准确的类型
              * application/octet-stream
         */
        //TODO
//        post(URLString, parameters: parameter, headers: nil, constructingBodyWith: { formData in
//            formData.appendPart(withFileData: data, name: name, fileName: "test", mimeType: "application/octet-stream")
//        }, progress: nil) { _, result in
//            finished(result,nil)
//        } failure: { _, error in
//            print(error)
//            finished(nil,error)
//        }
        //2>上传文件
        AF.upload(multipartFormData: { multipartFormData in
            //拼接上传文件的二进制数据
            multipartFormData.append(data, withName: name, fileName: "test", mimeType: "application/octet-stream")
            //遍历参数字典,生成对应的参数数据
            if let parameter = parameter {
                for (k, v) in parameter {
                    let str =  v as! String
                    let strData = str.data(using: .utf8)!
                    // data 是 v 的二进制数据 name 是 K
                    multipartFormData.append(strData, withName: k)
                }
            }
        }, to: URLString)
        .responseJSON { response in
            print(response.result)
            switch response.result{
            case let .success(data):
                //完成回调
                finished(data,nil)
                break
            case let .failure(error):
                //在开发网络应用中的时候,错误不要提示给用户,但是错误一定要输出
                print(error)
                finished(nil,error)
                break
            }
        }
    }

 类似资料: