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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是几个iOS开源Swift代码的示例项目: 1. SwiftLint:一个用于在Swift项目中执行代码风格和规范检查的工具。它可以帮助开发者在编写代码时保持一致的风格和质量。 2. Alamofire:一个强大的网络请求库,用于在iOS应用程序中进行HTTP网络请求。它提供了简单易用的API,可以轻松处理网络请求和响应。 3. Kingfisher:一个用于在iOS应用程序中下载和缓存网络图片的库。它支持各种格式的图像,并具有高性能和简单的API。 4. SnapKit:一个用于在iOS应用程序中进行自动布局的库。它使用简单的链式语法,使得布局代码更加可读和易于维护。 5. RxSwift:一个用于在iOS应用程序中实现响应式编程的库。它提供了一套强大的工具和操作符,用于处理异步事件流和数据绑定。 6. SwiftyJSON:一个用于在Swift中解析和处理JSON数据的库。它使得解析和处理复杂的JSON数据结构变得简单和高效。 7. Moya:一个基于Alamofire的网络抽象层,用于在iOS应用程序中进行网络请求。它提供了一种优雅的方式来定义和组织网络请求和响应。 8. Realm:一个用于在iOS应用程序中处理本地数据库的库。它提供了简单的API,可以轻松地进行数据存储和查询。 9. SwiftyUserDefaults:一个用于在Swift中简化UserDefaults的库。它提供了一套方便的API,可以轻松地读写和管理应用程序的用户设置和偏好。 10. SwiftDate:一个用于在Swift中处理日期和时间的库。它提供了一套简单而强大的API,可以轻松地进行日期计算、格式化和本地化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值