前些时做的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文件里面的内容:

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 集成Alamofire/Kingfisher/MJRefresh/MBProgressHUD的小项目的更多相关文章

  1. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  2. ios – bug编译alamofire – 未知选项字符`X’: – Xlinker

    尝试使用cocoapods将alamofire添加到项目中.Xcode版本:6.1.1版Podfile:这是错误:解决方法通过升级到Cocoapods0.36beta解决了这个问题.我也不得不删除旧版本.

  3. cocoapods – 命令/ bin / sh失败,退出代码23

    适用于所有豆荚,无需豆荚但仍然是同样的错误.有任何想法吗?

  4. iOS编译库/框架链接器标记问题是设备编译而不是模拟器

    背景:我正在尝试使用带有cocoapods的Phonegap.Phonegap已经存在从命令行编译的问题所以我只是将Xcode与生成的项目文件一起使用(并且在使用cocoapods时我无论如何都必须这样做).我用我的问题向Github推送了一个复制的空项目:https://github.com/Dan2552/phonegap-reproducable-issue您可以在repo的根目录中的bui

  5. ios – “没有这样的模块’Alamofire’”将无法识别框架

    我正在尝试使用Swift将Alamofire添加到一个新的XCode项目中.我觉得我已经尝试了一切.每次我尝试添加进口Alamofire我得到“没有这样的模块”.我已按照https://github.com/Alamofire/Alamofire所述尝试安装,我尝试先手动完成,然后是Carthage和Cocoapods,但结果相同.我已经尝试删除DerivedData文件夹并重建项目,没有任何运气

  6. xcode – tvos:Alamofire框架的iTunesConnect验证失败:不包含bitcode

    解决方法我想你是在项目设置中用appletvsimulator提交Framework.检查此链接Carthageissue

  7. ios – CocoaPods CorePlot安装显示缺少的框架和丢失的文件

    我是CocoaPods的新手,我正在尝试在我的Podfile中使用此行安装CorePlot:当我在安装后打开.xcworkspace文件时,CorePlot会显示缺少的框架.我将这些链接的二进制文件安装到我的Xcode项目中,但这并没有解决问题.在CorePlot目标中,似乎没有单独的方法来安装框架.这不是唯一的问题.当我尝试在CorePlot库中引用文件时,即使我可以看到CorePlot目标中的文件,我也会收到文件未找到错误:我尝试了以下import语句:都导致同样的错误.我不知道这些问题是否相关.我应

  8. ios – 错误域= com.alamofire.error.serialization.response代码= -1011“请求失败:禁止

    任何人都可以帮我解决以下错误–>在AFNetworking2.5中使用“删除”方法时出错解决方法我发现,如果我的手机时钟不同步……它不允许我更新…也许检查你的手机设置到正确的时间“自动区”,看看是否有效…

  9. 通用iOS应用程序在TestFlight中的iPad Air 2上不兼容

    您应该为项目和目标设置“有效架构”:armv7,armv7s和arm64.

  10. ios – 如何在不创建新目标的情况下阻止`pod install`将libPods.a添加到“Link with Libraries”构建阶段?

    解决方法要防止集成,您可以使用:

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部