以前在swift3的时候,写过类似的,那个时候还没有很成熟的网络请求类库,在这里,还是衷心感谢大神们的付出!

具体效果如下,先上图:

点击按钮的时候,请求数据,数据结构如下:

{
"error_code" = ;
reason = successed;
result = (
{
des = "\U68a6\U89c1\U9ec4\U91d1\Uff0c\U9884\U793a\U4f1a\U906d\U9047\U632b\U6298\U3002\U68a6\U89c1\U6709\U4eba\U9001\U9ec4\U91d1\U7ed9\U81ea\U5df1\Uff0c\U53ef\U80fd\U4f1a\U8499\U53d7\U635f\U5931\U3002\U5973\U4eba\U68a6\U89c1\U4e22\U4e86\U9ec4\U91d1\Uff0c\U9884\U793a\U6dfb\U7f6e\U65b0\U9996\U9970\U3002";
id = 873e943d1bcb40cd4b289e0809803343;
title = "\U9ec4\U91d1 \U91d1\U5b50";
},
{
des = "\U68a6\U89c1\U9ec4\U91d1\Uff0c\U9884\U793a\U4f1a\U906d\U9047\U632b\U6298\U3002\U68a6\U89c1\U6709\U4eba\U9001\U9ec4\U91d1\U7ed9\U81ea\U5df1\Uff0c\U53ef\U80fd\U4f1a\U8499\U53d7\U635f\U5931\U3002\U5973\U4eba\U68a6\U89c1\U4e22\U4e86\U9ec4\U91d1\Uff0c\U9884\U793a\U6dfb\U7f6e\U65b0\U9996\U9970\U3002";
id = 237169518a0ff81aec29b80a546aa7ac;
title = "\U9ec4\U91d1";
},
{
des = "\U68a6\U89c1\U6361\U9ec4\U91d1\Uff0c\U4f60\U8981\U53d1\U5927\U8d22\Uff0c\U4f46\U8981\U52aa\U529b\U4e89\U53d6\U3002\U53d1\U8d22\U4e5f\U8981\U4ed8\U51fa\U52aa\U529b\Uff0c\U4e0d\U4f1a\U81ea\U52a8\U6389\U5728\U4f60\U7684\U53e3\U888b\U91cc\U3002";
id = 315f055cfbae60064e07427321e6a722;
title = "\U6361\U9ec4\U91d1";
}
);
}

具体代码如下:

1、目录结构

因为是在oc项目里面直接写的swift,所以桥接文件相关的知识点,可以参考这篇博客:

https://www.jianshu.com/p/754396e7e1bd,还用到了公共类,可以参考我的另一篇博客

2、先布局,最上面是个textfield,中间是个buutton,最下层是个tableview,使用的事自定义的cell(xib),代码如下:

func setUI() {
self.textField = UITextField()
self.textField.placeholder = "请输入你梦境中梦到的人、事或者物"
self.view.addSubview(self.textField)
self.textField.snp.makeConstraints { (make) in
make.centerX.equalTo(self.view)
make.top.equalTo()
make.left.equalTo()
make.height.equalTo()
} let button:UIButton = UIButton(type: .custom)
button.setTitle("点击", for: .normal)
button.backgroundColor = UIColor.red
self.view.addSubview(button)
button.addTarget(self, action: #selector(sendAction), for: .touchUpInside) button.snp.makeConstraints { (make) in
make.centerX.equalTo(self.view)
make.top.equalTo(self.textField.snp.bottom).offset()
make.left.equalTo()
make.height.equalTo()
} self.table = UITableView(frame: CGRect(x: , y: , width:ScrnWidth , height: ScrnHeight-),style: .plain)
self.table.delegate = self
self.table.dataSource = self
self.table.register(UINib(nibName: "MyCell", bundle: nil), forCellReuseIdentifier: "mycell")
self.view.addSubview(self.table)
self.table.estimatedRowHeight = UITableView.automaticDimension
self.table.tableFooterView = UIView()
}

3、工具类:网络请求类Alamofire,这里简单封装了下:

import UIKit
import Alamofire
import SwiftyJSON enum MethodType {
case get
case post
} class SwiftRequest {
class func requestData(_ type : MethodType, URLString : String, parameters : [String : Any]? = nil, finishedCallback : @escaping (_ result : Any) -> ()) { // 1.获取类型
let method = type == .get ? HTTPMethod.get : HTTPMethod.post // 2.发送网络请求
Alamofire.request(URLString, method: method, parameters: parameters).responseJSON { (response) in // 3.获取结果
guard let result = response.result.value else {
print(response.result.error!)
return
} // 4.将结果回调出去
finishedCallback(result)
}
}
}

全部代码如下:

import UIKit
import SnapKit
import SwiftyJSON class OpenDreamViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { lazy var table = UITableView()
var textField = UITextField()
lazy var dataArray = NSArray() override func viewDidLoad() {
super.viewDidLoad() self.view.backgroundColor = UIColor.white
self.setUI()
} func setUI() {
self.textField = UITextField()
self.textField.placeholder = "请输入你梦境中梦到的人、事或者物"
self.view.addSubview(self.textField)
self.textField.snp.makeConstraints { (make) in
make.centerX.equalTo(self.view)
make.top.equalTo()
make.left.equalTo()
make.height.equalTo()
} let button:UIButton = UIButton(type: .custom)
button.setTitle("点击", for: .normal)
button.backgroundColor = UIColor.red
self.view.addSubview(button)
button.addTarget(self, action: #selector(sendAction), for: .touchUpInside) button.snp.makeConstraints { (make) in
make.centerX.equalTo(self.view)
make.top.equalTo(self.textField.snp.bottom).offset()
make.left.equalTo()
make.height.equalTo()
} self.table = UITableView(frame: CGRect(x: , y: , width:ScrnWidth , height: ScrnHeight-),style: .plain)
self.table.delegate = self
self.table.dataSource = self
self.table.register(UINib(nibName: "MyCell", bundle: nil), forCellReuseIdentifier: "mycell")
self.view.addSubview(self.table)
self.table.estimatedRowHeight = UITableView.automaticDimension
self.table.tableFooterView = UIView()
} func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.dataArray.count
} func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell:MyCell = tableView.dequeueReusableCell(withIdentifier: "mycell") as! MyCell let dict = self.dataArray[indexPath.row] as! NSDictionary cell.titleLab.text = dict["title"] as? String
cell.contentLab.text = (dict["des"] as? String) return cell
} func setData() { let parameters : [String : String] = ["q" : self.textField.text!,"key":key] SwiftRequest.requestData(.get, URLString: "http://zhouxunwang.cn/data/?id=60", parameters: parameters) { (result) in print(result) let Dict = result as! NSDictionary
let error = Dict["error_code"] as! Int64 if error == {
self.dataArray = Dict["result"] as! NSArray
}else{
print("请求失败")
} self.table.reloadData()
} } @objc func sendAction() { self.textField.endEditing(true) print("点击了") if (self.textField.text?.isEmpty ?? nil)! {
print("不能为空") return
}else{ self.setData()
}
} }

以上就是简单封装一个请求类,请求数据的的一个简单demo,上面的接口是免费的可以直接用!

仅做记录!后期会陆续加上swiftjson和model


swift开发之--简单封装Alamofire请求类以及简单使用SnapKit的更多相关文章

  1. Xamarin.Android之封装个简单的网络请求类

    一.前言 回忆到上篇 <Xamarin.Android再体验之简单的登录Demo> 做登录时,用的是GET的请求,还用的是同步, 于是现在将其简单的改写,做了个简单的封装,包含基于Http ...

  2. 微信小程序开发——使用promise封装异步请求

    前言: 有在学vue的网友问如何封装网络请求,这里以正在写的小程序为例,做一个小程序的请求封装. 关于小程序发起 HTTPS 网络请求的Api,详情可以参考官方文档:wx.request(Object ...

  3. 简单封装数据请求(iOS)

    #import <Foundation/Foundation.h> //给block起 别名 //类型 void(^)(BOOL success , id data) //别名是 Comp ...

  4. Swift - 简单封装一个工具类模板

    创建模板类(封装一个类) 例1:新建一个名字叫做 Product 的类 Product.swift File 的内容 class Product { var name: String var desc ...

  5. 使用nodegrass简单封装http请求例子

    1.项目中经常性的使用http发送请求处理数据.而大部分请求方式为get和post,于是对http请求进行封装,提供代码的利用率. 2.nodegress是nodejs的一个请求工具. 具体步骤及代码 ...

  6. ios中封装网络请求类

    #import "JSNetWork.h" //asiHttpRequest #import "ASIFormDataRequest.h" //xml 的解析 ...

  7. block传值以及利用block封装一个网络请求类

    1.block在俩个UIViewController间传值 近期刚学了几招block 的高级使用方法,事实上就是利用block语法在俩个UIViewController之间传值,在这里分享给刚開始学习 ...

  8. 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装

    微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...

  9. 封装一个简单好用的打印Log的工具类And快速开发系列 10个常用工具类

    快速开发系列 10个常用工具类 http://blog.csdn.net/lmj623565791/article/details/38965311 ------------------------- ...

随机推荐

  1. ABP进阶教程0 - 目录

    ABP进阶教程 本教程主要讲解如何基于ABP实现条件查询/分页/排序/导出/打印等功能. 源码已分享:   GitHub   Gitee ABP进阶教程0 - 目录 ABP进阶教程1 - 条件查询 A ...

  2. python 逐行读取txt文件

    逐行读取txt文件 path = r'D:\123456\1.txt'with open(path, 'r', encoding='utf-8') as f:    for line in f:   ...

  3. Shell命令-用户用户组管理之useradd、usermod

    文件及内容处理 - useradd.usermod 1. useradd:添加用户 useradd命令的功能说明 useradd 命令用于建立用户帐号.useradd 可用来建立用户帐号.帐号建好之后 ...

  4. Linux 修改/etc/sudoers 可被任何修改,如何解决

    今天不小心,修改了/etc/sudoers的权限 改成了 777的权限, 于是每次使用sudo都会弹出 sudo:sudo /etc/sudoers is world writable sudo:no ...

  5. FPDF_CloseDocument(doc);

    FPDF_CloseDocument(doc); 创建不加载就会段错误 必须创建     doc = FPDF_CreateNewDocument();

  6. 对CNN 的理解

    CNN 的强大之处在于它的多层结构能自动学习特征,并且可以学习到多个层次的特征:较浅的卷积层感知域较小,学习到一些局部区域的特征. 较深的卷积层具有较大的感知域,能够学习到更加抽象一些的特征.这些抽象 ...

  7. 2019 SDN上机第四次作业

    2019 SDN上机第4次作业 1. 解压安装OpenDayLight控制器(本次实验统一使用Beryllium版本) 修改环境变量 2. 启动并安装插件 3. 用Python脚本搭建如下拓扑,连接O ...

  8. 编程计算2×3阶矩阵A和3×2阶矩阵B之积C。 矩阵相乘的基本方法是: 矩阵A的第i行的所有元素同矩阵B第j列的元素对应相乘, 并把相乘的结果相加,最终得到的值就是矩阵C的第i行第j列的值。 要求: (1)从键盘分别输入矩阵A和B, 输出乘积矩阵C (2) **输入提示信息为: 输入矩阵A之前提示:"Input 2*3 matrix a:\n" 输入矩阵B之前提示

    编程计算2×3阶矩阵A和3×2阶矩阵B之积C. 矩阵相乘的基本方法是: 矩阵A的第i行的所有元素同矩阵B第j列的元素对应相乘, 并把相乘的结果相加,最终得到的值就是矩阵C的第i行第j列的值. 要求: ...

  9. HikariCP连接池

    1.HikariCP连接池是什么? HikariCP是数据库连接池,而且是号称史上最快的,而且目前来看确实是这样的,SpringBoot2.0也已经采用HikariCP作为默认连接池配置. githu ...

  10. R语言- 实验报告 - 利用R语言脚本与Java相互调用

    一. 实训内容 利用R语言对Java项目程序进行调用,本实验包括利用R语言对java的.java文件进行编译和执行输出. 在Java中调用R语言程序.本实验通过eclipse编写Java程序的方式,调 ...