Swift 集成Alamofire/Kingfisher/MJRefresh/MBProgressHUD的小项目
2016-05-08 10:45
309 查看
前些时做的Swift版本的瀑布流的Demo《Swift UITableView瀑布流/NSURLConnection异步网络请求》时,使用的是NSURLConnection做的网络异步请求,图片的异步加载使用的是GCD做的。在使用的过程中,网络请求部分是没有什么问题的,但是在图片的异步加载时,由于图片没有缓存,所以在上下滑动的时候,需要不断的加载图片,所以用户体验不好。
在OC中,我们有AFNetworking和SDWebimage做网络的加载和图片的加载。那么在Swift中也是有类似的:Alamofire和Kingfisher。前者是网络加载,后者是图片加载。在使用的过程中使用的是CocoaPods集成进来的。关于CocoaPods的集成可以移步《iOS 开发CocoaPods的使用》。
于是在做这个小的Swift的项目中,一共集成了四个第三方库:Alamofire/Kingfisher/MJRefresh/MBProgressHUD。
关于Alamofire/Kingfisher/MJRefresh的集成,按照这个三个第三库上面的CocoaPods方法集成就可以,可以看看Podfile文件里面的内容:
但是集成MBProgressHUD就需要手动拖拽集成了。我们把MBProgressHUD的.m和.h文件拖拽进来后,提示我们新建一个Swift和OC的桥接文件,可看看《Swift Swift和OC混编》,我们把
放在桥接文件就可以使用MBProgressHUD了。
关于上面的四个第三方库,可以查看GitHub或是百度就可以了。
先看看这个项目的效果图:
使用的API是showAPI上面的微信大全。
视图使用的IB拉的。
获取当前时间:
基本四个第三方库
Alamofire/Kingfisher/MJRefresh/MBProgressHUD的简单使用基本就是这样的。
但是还有需要改善的,比如可以把MBProgressHUD再封装一下的,这样使用起来就更加方便了;可以新建一个.pch文件,把需要在多个地方使用的头文件放在.pch文件,这样就不需要在使用的过程中多次写头文件;等等。
代码下载地址:Alamofire-Kingfisher
在OC中,我们有AFNetworking和SDWebimage做网络的加载和图片的加载。那么在Swift中也是有类似的:Alamofire和Kingfisher。前者是网络加载,后者是图片加载。在使用的过程中使用的是CocoaPods集成进来的。关于CocoaPods的集成可以移步《iOS 开发CocoaPods的使用》。
于是在做这个小的Swift的项目中,一共集成了四个第三方库:Alamofire/Kingfisher/MJRefresh/MBProgressHUD。
关于Alamofire/Kingfisher/MJRefresh的集成,按照这个三个第三库上面的CocoaPods方法集成就可以,可以看看Podfile文件里面的内容:
source 'https://github.com/CocoaPods/Specs.git' platform :ios, '9.0' use_frameworks! pod 'Alamofire', '~> 3.3' source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' use_frameworks! pod 'Kingfisher', '~> 2.4' pod 'MJRefresh' use_frameworks!
但是集成MBProgressHUD就需要手动拖拽集成了。我们把MBProgressHUD的.m和.h文件拖拽进来后,提示我们新建一个Swift和OC的桥接文件,可看看《Swift Swift和OC混编》,我们把
#import "MBProgressHUD.h"
放在桥接文件就可以使用MBProgressHUD了。
关于上面的四个第三方库,可以查看GitHub或是百度就可以了。
先看看这个项目的效果图:
使用的API是showAPI上面的微信大全。
初始化视图:
func initView() { self.tableView.registerNib(UINib(nibName: "WXTableViewCell", bundle:nil), forCellReuseIdentifier: "WXTableViewCell") // 添加下拉刷新 self.tableView.mj_header = MJRefreshNormalHeader(refreshingTarget: self,refreshingAction: #selector(ViewController.headRefresh)) // 添加上拉加载更多 self.tableView.mj_footer = MJRefreshAutoNormalFooter(refreshingTarget: self,refreshingAction: #selector(ViewController.addMoreData)) }
视图使用的IB拉的。
Alamofire网络请求部分:
// MARK: 网络请求 /** 网络请求 - parameter pageIndex: 页数 */ func requestData(pageIndex: String){ self.showHUD() // 设置请求参数 let showapi_timestamp = self.getDataStr() let parameters = [ "key": "", "showapi_appid": showapi_appid, "showapi_sign": showapi_sign, "page": pageIndex, "showapi_timestamp": showapi_timestamp, ] Alamofire.request(.GET, baseUrl, parameters: parameters).responseJSON {response in switch response.result{ case .Success(let dice): self.hideHUD() let dice1 = dice["showapi_res_body"] as! NSDictionary let dice2 = dice1["pagebean"] as! NSDictionary self.allPages = dice2["allPages"] as! NSNumber let contentlist = dice2["contentlist"] as! NSArray // 下拉刷新 数组清空 if pageIndex == "1"{ self.dataArray.removeAllObjects() } for dataDice in contentlist{ let model = DataModel() // 数据转模型 添加进数组 self.dataArray.addObject(model.makeDataModel(dataDice as! NSDictionary)) } self.flag = 2 self.tableView.reloadData() // 刷新完成 结束上下拉 self.tableView.mj_header.endRefreshing() self.tableView.mj_footer.endRefreshing() case .Failure(let error): print(error) self.hideHUD() } } }
获取当前时间:
/** 获取当前时间 - returns: 当前时间 */ func getDataStr() -> String{ let date1 = NSDate() let dataFormat = NSDateFormatter.init() // yyyyMMddHHmmss dataFormat.dateFormat = "yyyyMMddHHmmss" let dataString = dataFormat.stringFromDate(date1) as String return dataString }
实现上下拉方法:
// MARK: 上下拉 /** 下拉刷新 */ func headRefresh() { self.requestData("1") } /** 上拉加载更多 */ func addMoreData() { self.currentPage = self.currentPage + 1 if self.currentPage < self.allPages.integerValue { let page = String(self.currentPage) self .requestData(page) } }
MBProgressHUD的使用:
// MARK: 菊花 func showHUD() { let hud = MBProgressHUD.showHUDAddedTo(self.view, animated: true) hud.mode = MBProgressHUDMode.Indeterminate hud.labelText = "数据加载中……" hud.dimBackground = true } func hideHUD() { MBProgressHUD.hideAllHUDsForView(self.view, animated: true) }
Kingfisher的使用
在使用Kingfisher是比较简单的使用。主要实在给cell填充数据时使用。/** 给cell填充数据 - parameter dataArray: 数据集合 - parameter indexPath: indexPath */ func fillCellWiftDataArray(dataArray :NSArray, indexPath: NSIndexPath){ let model = dataArray[indexPath.row] as! DataModel self.userImageView.kf_setImageWithURL(NSURL(string: model.userLogo)!) self.userNameLabel.text = model.userName self.timerLabel.text = model.date; self.mainImageView.kf_setImageWithURL(NSURL(string: model.contentImg)!) self.contentLabel.text = model.title self.typeLabel.text = model.typeName }
基本四个第三方库
Alamofire/Kingfisher/MJRefresh/MBProgressHUD的简单使用基本就是这样的。
总结
在这个小的项目中,看起来只有两个页面,但是我们学会了怎么集成Alamofire/Kingfisher/MJRefresh/MBProgressHUD和使用,CocoaPods的使用,Swift和OC的混编。但是还有需要改善的,比如可以把MBProgressHUD再封装一下的,这样使用起来就更加方便了;可以新建一个.pch文件,把需要在多个地方使用的头文件放在.pch文件,这样就不需要在使用的过程中多次写头文件;等等。
代码下载地址:Alamofire-Kingfisher
相关文章推荐
- swift基础学习(04)[运算符、属性、属性观察器、方法、下脚标本、继承、构造器]
- swift基础学习(04)[闭包、函数、枚举、类和结构体]
- swift基础学习(03)[数组、集合、字典]
- swift基础学习(03)
- Swift解读专题二——基本类型
- 若干道Swift面试题
- 对照Java学习Swift--析构过程(Deinitialization)
- swift-struct
- Swift中把图片保存到相册
- 对照Java学习Swift--构造过程(Initialization)
- swift 新闻列表实现
- swift 新闻列表实现
- swift TabBar
- Swift-贝赛尔曲线实现画图板 && 截图保存到相册中
- Swift 有哪些优秀的第三方库?
- swift 泛型
- SWift开发:使用委托/Protocol 实现类之间的数据传递
- Swift中方法闭包参数不能省略括号的一种情况
- Swift中方法闭包参数不能省略括号的一种情况
- Swift中方法闭包参数不能省略括号的一种情况