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

具体效果如下,先上图:

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

  1. {
  2. "error_code" = ;
  3. reason = successed;
  4. result = (
  5. {
  6. 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";
  7. id = 873e943d1bcb40cd4b289e0809803343;
  8. title = "\U9ec4\U91d1 \U91d1\U5b50";
  9. },
  10. {
  11. 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";
  12. id = 237169518a0ff81aec29b80a546aa7ac;
  13. title = "\U9ec4\U91d1";
  14. },
  15. {
  16. 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";
  17. id = 315f055cfbae60064e07427321e6a722;
  18. title = "\U6361\U9ec4\U91d1";
  19. }
  20. );
  21. }

具体代码如下:

1、目录结构

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

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

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

  1. func setUI() {
  2. self.textField = UITextField()
  3. self.textField.placeholder = "请输入你梦境中梦到的人、事或者物"
  4. self.view.addSubview(self.textField)
  5. self.textField.snp.makeConstraints { (make) in
  6. make.centerX.equalTo(self.view)
  7. make.top.equalTo()
  8. make.left.equalTo()
  9. make.height.equalTo()
  10. }
  11.  
  12. let button:UIButton = UIButton(type: .custom)
  13. button.setTitle("点击", for: .normal)
  14. button.backgroundColor = UIColor.red
  15. self.view.addSubview(button)
  16. button.addTarget(self, action: #selector(sendAction), for: .touchUpInside)
  17.  
  18. button.snp.makeConstraints { (make) in
  19. make.centerX.equalTo(self.view)
  20. make.top.equalTo(self.textField.snp.bottom).offset()
  21. make.left.equalTo()
  22. make.height.equalTo()
  23. }
  24.  
  25. self.table = UITableView(frame: CGRect(x: , y: , width:ScrnWidth , height: ScrnHeight-),style: .plain)
  26. self.table.delegate = self
  27. self.table.dataSource = self
  28. self.table.register(UINib(nibName: "MyCell", bundle: nil), forCellReuseIdentifier: "mycell")
  29. self.view.addSubview(self.table)
  30. self.table.estimatedRowHeight = UITableView.automaticDimension
  31. self.table.tableFooterView = UIView()
  32. }

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

  1. import UIKit
  2. import Alamofire
  3. import SwiftyJSON
  4.  
  5. enum MethodType {
  6. case get
  7. case post
  8. }
  9.  
  10. class SwiftRequest {
  11. class func requestData(_ type : MethodType, URLString : String, parameters : [String : Any]? = nil, finishedCallback : @escaping (_ result : Any) -> ()) {
  12.  
  13. // 1.获取类型
  14. let method = type == .get ? HTTPMethod.get : HTTPMethod.post
  15.  
  16. // 2.发送网络请求
  17. Alamofire.request(URLString, method: method, parameters: parameters).responseJSON { (response) in
  18.  
  19. // 3.获取结果
  20. guard let result = response.result.value else {
  21. print(response.result.error!)
  22. return
  23. }
  24.  
  25. // 4.将结果回调出去
  26. finishedCallback(result)
  27. }
  28. }
  29. }

全部代码如下:

  1. import UIKit
  2. import SnapKit
  3. import SwiftyJSON
  4.  
  5. class OpenDreamViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
  6.  
  7. lazy var table = UITableView()
  8. var textField = UITextField()
  9. lazy var dataArray = NSArray()
  10.  
  11. override func viewDidLoad() {
  12. super.viewDidLoad()
  13.  
  14. self.view.backgroundColor = UIColor.white
  15. self.setUI()
  16. }
  17.  
  18. func setUI() {
  19. self.textField = UITextField()
  20. self.textField.placeholder = "请输入你梦境中梦到的人、事或者物"
  21. self.view.addSubview(self.textField)
  22. self.textField.snp.makeConstraints { (make) in
  23. make.centerX.equalTo(self.view)
  24. make.top.equalTo()
  25. make.left.equalTo()
  26. make.height.equalTo()
  27. }
  28.  
  29. let button:UIButton = UIButton(type: .custom)
  30. button.setTitle("点击", for: .normal)
  31. button.backgroundColor = UIColor.red
  32. self.view.addSubview(button)
  33. button.addTarget(self, action: #selector(sendAction), for: .touchUpInside)
  34.  
  35. button.snp.makeConstraints { (make) in
  36. make.centerX.equalTo(self.view)
  37. make.top.equalTo(self.textField.snp.bottom).offset()
  38. make.left.equalTo()
  39. make.height.equalTo()
  40. }
  41.  
  42. self.table = UITableView(frame: CGRect(x: , y: , width:ScrnWidth , height: ScrnHeight-),style: .plain)
  43. self.table.delegate = self
  44. self.table.dataSource = self
  45. self.table.register(UINib(nibName: "MyCell", bundle: nil), forCellReuseIdentifier: "mycell")
  46. self.view.addSubview(self.table)
  47. self.table.estimatedRowHeight = UITableView.automaticDimension
  48. self.table.tableFooterView = UIView()
  49. }
  50.  
  51. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  52. return self.dataArray.count
  53. }
  54.  
  55. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  56. let cell:MyCell = tableView.dequeueReusableCell(withIdentifier: "mycell") as! MyCell
  57.  
  58. let dict = self.dataArray[indexPath.row] as! NSDictionary
  59.  
  60. cell.titleLab.text = dict["title"] as? String
  61. cell.contentLab.text = (dict["des"] as? String)
  62.  
  63. return cell
  64. }
  65.  
  66. func setData() {
  67.  
  68. let parameters : [String : String] = ["q" : self.textField.text!,"key":key]
  69.  
  70. SwiftRequest.requestData(.get, URLString: "http://zhouxunwang.cn/data/?id=60", parameters: parameters) { (result) in
  71.  
  72. print(result)
  73.  
  74. let Dict = result as! NSDictionary
  75. let error = Dict["error_code"] as! Int64
  76.  
  77. if error == {
  78. self.dataArray = Dict["result"] as! NSArray
  79. }else{
  80. print("请求失败")
  81. }
  82.  
  83. self.table.reloadData()
  84. }
  85.  
  86. }
  87.  
  88. @objc func sendAction() {
  89.  
  90. self.textField.endEditing(true)
  91.  
  92. print("点击了")
  93.  
  94. if (self.textField.text?.isEmpty ?? nil)! {
  95. print("不能为空")
  96.  
  97. return
  98. }else{
  99.  
  100. self.setData()
  101. }
  102. }
  103.  
  104. }

以上就是简单封装一个请求类,请求数据的的一个简单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. PHP代码篇(二)-- array_column函数将二维数组格式化成固定格式的一维数组,及优化查询方法

    小白因为经常用到多表查询,比如获取一个会员领取的卡卷list,里面当然包含了1“会员优惠券记录表t_coupon_members”主表,然后2“门店优惠券表t_coupon”,和3“门店信息表t_sh ...

  2. Mysql—常见查询命令

    查询mysql的日志 -- 查找错误日志文件路径 mysql> show variables like "log_error"; -- 查找通用日志文件路径 mysql> ...

  3. putty 配色方案

    putty 配色方案 修改地点: Default Foreground: 255/255/255 Default Background: 51/51/51 ANSI Black: 77/77/77 A ...

  4. (入门SpringBoot)SpringBoot项目事务(三)

    Spring声明式事务的使用:由@Transactional进行标注,可以使用在类和方法上.当标注在类上,类下面所有公共非静态的方法都将启用事务功能.接下来,运行事务注解标注的方法,Spring的事务 ...

  5. Jike_Time-决策树

    根节点 非叶子节点(决策点) 叶子节点(决策结果) 分支 熵代表混乱程度 信息增益 构造树的基本想法是随着树深度的增加.节点的熵迅速地降低.熵降低的速度越快越好,这样我们有望得到一颗高度最矮的决策树 ...

  6. javaScript___计算时间前一天和后一天案例

    1.  HTML 排版 <button onclick="anteayer()">前天</button> <button onclick=" ...

  7. Moving x86 assembly to 64-bit (x86-64)

    While 64-bit x86 processors have now been on the market for more than 5 years, software support is o ...

  8. 用Python爬取猫眼上的top100评分电影

    代码如下: # 注意encoding = 'utf-8'和ensure_ascii = False,不写的话不能输出汉字 import requests from requests.exception ...

  9. polyfll方案优化

    polyfill 在es6风靡的时候,babel给了我们一个有力的转换方案,可以在低版本浏览器上写一些新语法而不用考虑兼容问题 polyfill的诞生 语法和API区分 语法是用来产生特殊效果的一些符 ...

  10. svg path 解析

    <pre><svg width="100%" height="100%" version="1.1" xmlns=&quo ...