Alamofire框架发送网络请求
2020-12-31 本文已影响0人
iOS丶Michelle
一、准备工作
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

成功后,控制台打印

在这里我使用工具 Hypernap 查看数据,更加的清晰
