swift学习iOS DeveloperiOS学习

Swift环境下使用MJExtension

2017-09-02  本文已影响351人  ame017

最近开始学习swift3.0的新特性
由于是从OC转过来的
所以对MJExtension和ESJsonFormat很有感情
这里分享一下如何在swift环境下使用MJExtension

所用技术

安装

使用pod安装 这里有几个坑

  1. 注意Podfile中加入一行
use_frameworks!

完整的podfile例

platform :ios, ‘8.0’
use_frameworks!

target ‘SwiftDemo’ do
pod 'Alamofire', '~> 4.5.0'
pod 'SwiftyJSON', '~> 3.1.4'

pod 'MJExtension', '~> 3.0.13'
pod 'SVProgressHUD', '~> 2.0.3'
end
  1. 添加Briding-Header.h文件以便引用OC的类
    创建一个.h文件 如Objc-Briding-Header.h
    Apple建议使用-Briding-Header字段作为后缀 这里果断就听苹果爸爸的话了
    在里面import需要的OC的类
    坑:
#import"xxxx.h"

而不用

#import<xxxx.h>

例如 完整的Briding-Header.h

#ifndef Objc_Briding_Header_h
#define Objc_Briding_Header_h

#import "SVProgressHUD.h"
#import "MJExtension.h"

//model
#import "DemoModelOne.h"

#endif /* Objc_Briding_Header_h */
  1. 在target——>build setting中搜索bridg 把Objective-C Bridging Header路径设置一下,一定要设置对,如果你的桥接文件不是和project工程文件在同一级项目目录中,要记得把你的文件所在的目录加进路径,一定要确保根据这个路径可以找到你的桥接文件。如图


    1.png
  2. 设置一个User Header Search Paths,否则在需要用三方库的地方是调不出来的。在target——>Build Setting里找到search Paths,双击User Header Search Paths后面的空白处,设置目录路径为${SRCROOT} 后边选择recursive。如图


    2.png

使用

模型的建立

这里很多同学直接就去建了swift模型,其实这里应该使用OC模型,如果是swift模型,MJExtension可能不能完美的完成转换.而且建立OC模型,可以使用ESJsonFormat来完成,非常方便.
关于ESJsonFormat的使用,请参考ESJsonFormat github

使用Alamofire获取json

Alamofire是OC中著名开源网络框架AFNetworking的swift版本
关于Alamofire的使用,请参考Alamofire github

使用SwiftyJSON

SwiftyJSON是swift中著名的json解析工具,使用这个插件,可以让json多层连续解析而不产生crash.
关于SwiftyJSON的使用,请参考SwiftyJSON github

具体使用代码例

关于MJExtension的基本用法(OC),请参考作者的介绍MJExtension github

    func getData(_ completion:@escaping ()->Void) -> Void {
        //显示hud
        SVProgressHUD.setStatus("加载中")
        let url = "http://xxxxxx"
        Alamofire.request(url).responseJSON { (response) in
            //隐藏hud
            SVProgressHUD.dismiss()
            response.result.ifSuccess({
                //使用SwiftyJSON解析json并取数组层数据
                let json = JSON(response.data as Any)
                let jsonData = json["goodsRecommendTypeFormBeans"][0]["goodsRecommendFormList"].rawValue
                for dic in (jsonData as! Array<Any>){
                    //字典转为OC字典不然MJExtension不会进行转换
                    let nsdic = dic as! [NSObject : AnyObject]
                    //用MJExtension转成OC模型
                    let model = DemoModelOne.mj_object(withKeyValues: nsdic)
                    //把模型写入数组
                    self.dataArray.append(model!)
                }
                print(self.dataArray)
                completion()
            })
        }
    }

由此,你获得了一个装满了model的dataArray 尽情折腾吧!

相关文章

上一篇 下一篇

猜你喜欢

热点阅读