美文网首页
Alamofire框架发送网络请求

Alamofire框架发送网络请求

作者: iOS丶Michelle | 来源:发表于2020-12-31 19:11 被阅读0次
一、准备工作

1.打开终端 cd 到项目文件夹下
2.初始化Podfile文件,终端先别关

pod init

3.编辑Podfile文件

# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'
# Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

target 'AVPlay' do
 pod 'Alamofire', '~> 4.4'

end

4.在终端输入

pod install --no-repo-update
二、新建一个 cocoa Touch Class文件,封装我们自己的请求方法
//
//  NetWork.swift
//  AVPlay
//
//  Created by hb on 2020/12/31.
//

import UIKit
import Alamofire

enum reqtype {
    case get
    case post
}

class NetWork {
    //类方法 +(void)
    class func net(requrl:String,reqtype:reqtype,params:[String:Any]?=nil,finishecallback:@escaping(_ result:Any)->()){
        //把类方法的参数代入Alamofire
        let method = reqtype == .get ? HTTPMethod.get : HTTPMethod.post
        Alamofire.request(requrl, method: method, parameters: params)
            //发送网络请求
            .responseJSON { (response) in
                //校验结果用 guard 抵制
                guard let res = response.result.value else{
                    print(response.result.error)
                    return
                }
                finishecallback(res)
            }
    }
}

三、在ViewController.swift调用我们写的请求方法

注:我这里还建立了数据模型,代码放在第四步,然后这个本地的服务器是node.js搭建的

//
//  ViewController.swift
//  AVPlay
//
//  Created by hb on 2020/12/31.
//

import UIKit


class ViewController: UIViewController {
    //懒加载属性
    fileprivate lazy var goodsList: [GoodsModel] = [GoodsModel]()
    @IBOutlet weak var tableview: UITableView!
    @IBOutlet weak var videoview: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        //请求数据
        NetWork.net(requrl: "http://localhost:3000/client.action?functionId=getCmsPromotionsListByCatelogyID", reqtype: .post) { (res:Any) in
            //print(res)
            //将res:Any转成字典类型
            guard let resdict = res as? [String:Any] else{return}
            //从字典resdict取出 cmsPromotionsList 对应的内容  它是个数组,里面每一项{}是字典类型
            guard let goodsArray = resdict["cmsPromotionsList"] as? [[String:Any]] else{return}
            //遍历每一项,将字典{}转成模型对象
            for item in goodsArray{
                //GoodsModel(dict: item)
                //将模型对象保存起来
                self.goodsList.append(GoodsModel(dict: item))
            }
        }
    }
}


第四、新建一个 cocoa Touch Class文件,建立数据模型
//
//  GoodsModel.swift
//  AVPlay
//
//  Created by hb on 2020/12/31.
//

import UIKit

@objcMembers
class GoodsModel: NSObject {
    //建立模型,需要哪些数据,参照json字段来定义
    var promotion_name:String = ""
    var promotion_id:Int = 0
    
    //定义字典转模型构造函数,   参数dict----dict类型是个字典
    init(dict:[String:Any]) {
        super.init()
        //设置模型的value,根据字典的key来进行循环查找
        setValuesForKeys(dict)
    }
    //如果字典里有些key模型没有用到,需要重写
    override func setValue(_ value: Any?, forUndefinedKey key: String) {}
}

可能出现的问题,以及解决方式,修改 info.plist
Alamofire解决错误.png
成功后,控制台打印
成功了.png
在这里我使用工具 Hypernap 查看数据,更加的清晰
image.png

相关文章

网友评论

      本文标题:Alamofire框架发送网络请求

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