最近开始学习swift3.0的新特性
由于是从OC转过来的
所以对MJExtension和ESJsonFormat很有感情
这里分享一下如何在swift环境下使用MJExtension
所用技术
- swift
- MJExtension
- ESJsonFormat
- Alamofire
- SwiftyJSON
安装
使用pod安装 这里有几个坑
- 注意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
- 添加Briding-Header.h文件以便引用OC的类
创建一个.h文件 如Objc-Briding-Header.h
Apple建议使用-Briding-Header字段作为后缀 这里果断就听苹果爸爸的话了
在里面import需要的OC的类
坑:
- 这里的#import 没有代码提示
且无论是否是什么类型的类 都用
#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 */
- import之后需要进行一些设置
-
在target——>build setting中搜索bridg 把Objective-C Bridging Header路径设置一下,一定要设置对,如果你的桥接文件不是和project工程文件在同一级项目目录中,要记得把你的文件所在的目录加进路径,一定要确保根据这个路径可以找到你的桥接文件。如图
1.png -
设置一个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 尽情折腾吧!
网友评论