Swift 集成Alamofire/Kingfisher/MJRefresh/MBProgressHUD的小项目

前些时做的Swift版本的瀑布流的Demo《Swift UITableView瀑布流/NSURLConnection异步网络请求》时,使用的是NSURLConnection做的网络异步请求,图片的异步加载使用的是GCD做的。在使用的过程中,网络请求部分是没有什么问题的,但是在图片的异步加载时,由于图片没有缓存,所以在上下滑动的时候,需要不断的加载图片,所以用户体验不好。

在OC中,我们有AFNetworking和SDWebimage做网络的加载和图片的加载。那么在Swift中也是有类似的:AlamofireKingfisher。前者是网络加载,后者是图片加载。在使用的过程中使用的是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

时间: 2024-10-26 07:14:00

Swift 集成Alamofire/Kingfisher/MJRefresh/MBProgressHUD的小项目的相关文章

Swift税率计算小项目

今天按照raywenferlich上面的一篇Swift教程敲了一下Swift的代码,基本熟悉了Swift的语法和Objective-c的区别,当然要熟悉这个语言还要下很多的功夫和时间的,整体来说Swift的上手还是比较快的,这个语言的语法也蛮简洁的,精炼,苹果自家的语言的,也确实蛮有苹果自己的一些风格的. 以前的Objective-c语言,会有两个文件,分别是.h和.m文件,而Swift只有一个文件的,这个小项目也是先创建一个modl,然后在viewController中把view和model关

iOS开发——网络编程Swift篇&amp;Alamofire详解

Alamofire详解 预览图 Swift Alamofire 简介 Alamofire是 Swift 语言的 HTTP 网络开发工具包,相当于Swift实现AFNetworking版本. 当然,AFNetworking非常稳定,在Mac OSX与iOS中也能像其他Objective-C代码一样用Swift编写.不过Alamofire更适合Swift语言风格习惯(Alamofire与AFNetworking可以共存一个项目中,互不影响). Alamofire 取名来源于Alamo Fire fl

ios学习笔记图片+图片解释(c语言 oc语言 ios控件 ios小项目 ios小功能 swift都有而且笔记完整喔)

下面是目录其中ios文件夹包括了大部分ios控件的介绍和演示,swift的时完整版,可以学习完swift(这个看的是swift刚出来一周的视频截图,可能有点赶,但是完整),c语言和oc语言的也可以完整的学习完所需知识,,其他文件夹的内容如其名说描述一样 没张图片都有文字说明,可以需要该功能的时候搜索一下然后打开图片就可以学习到 网盘下载地址:需要的话给留言我再传上去 http://www.cnblogs.com/langtianya原创 ios学习笔记图片+图片解释(c语言 oc语言 ios控件

Swift集成极光推送

今天介绍一下用swift集成极光推送 一.首先到极光推送的官网下载iOS对应的SDK包   SDK下载地址 二.第二步在极光的官网创建账号配置对应的应用信息,推送证书的这些就不介绍了很基本,官网的很详细 配置应用地址 三.第三创建一个工程,导入下载的SDK包,并且导入依赖的库文件,编译看有没有错误提示 四.配置工程的相关信息 五.开始代码编写,集成Jpush 六.运行工程,检测是否集成正确 七.后台测试,来到极光推送的应用后台测试 滑动消息进入前台,控制台打印通知消息 以上便是极光推送的集成步骤

[Swift]使用Alamofire传递参数时报错

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 } span.s1 { } span.s2 { font: 11.0px "PingFang SC" } Swift使用Alamofire传递递参数时报错,会提示超时,主要错误信息如下: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 }

IOS-小项目(饿了么 网络部分 简单实现)

在介绍小项目之前,在此说明一下此代码并非本人所写,我只是随笔的整理者. 在介绍之前先展现一下效果图. 看过效果图大家应该很熟悉了,就是饿了么的一个界面而已,值得注意的是,实现时并没有采用本地连接,而是实打实的网络连接.看一下文件架构. 这一采用的是MVC设计模式,虽然文件很少,但是也可以看. 下面开始正式介绍小项目的实现. 首先介绍Model的实现,很简单,实现模型即可, Shop.h // // Shop.h // CX-小项目(饿了么 网络部分 简单实现) // // Created by

仿微信聊天界面小项目总结

从开始学习ios时,做这个小项目就卡了很久,到现在这个小项目算是我做的比较熟练的一个了.oc和swift两个版本都顺利完成了.因此总结一下曾经在这个小项目中遇到的种种问题! 微信聊天界面主要内容有三部分构成: 1.TableView部分,设置好各种必须的代理: 2.TableViewCell部分,在自定义cell中要设置好三个控件的位置,这也是整个过程中最麻烦的部分: 3.设置TextField部分发送消息时,界面消息的刷新和TextField代理的设置. 第一部分: 主要设置TableView

最近做了一个Spring Boot小项目,大家帮忙找找bug吧, http://www.dbeetle.cn

最近做了一个Spring Boot小项目,网站顶部有源码地址,欢迎大家访问 http://www.dbeetle.cn 欢迎各位访问,提出意见,找找bug 网站说明 甲壳虫社区(Beetle Community) 一个开源的问答社区.论坛博客,您可以提出自己的问题.发布自己的文章.和其他用户交流 目前功能有第三方登陆.查看.发布.评论.消息通知.顶置.一键已读.搜索等 后续会不断更新完善,欢迎大家提供更好的建议 使用技术 Spring Boot.Mybatis.Thymeleaf.BootStr

Android开发不得不看的11个实战小项目

是不是想学Android开发(http://www.maiziedu.com/course/android-px/)却不知道如何下手?懂得一点点入门基础知识却无法应用到实际开发中?看相关资料觉得都懂了实际动手却发现什么都不懂?本地搭建Android开发环境太麻烦? 如果你有以上的各种问题,那么今天小编推荐的Android开发的这11个小项目,你一定要看!! 因为,这些实战项目都是基于google 官方的API Demos制作而成,而且全部配有Android在线开发环境,你可以随时动手跟着课程操作