最近開(kāi)始學(xué)習(xí)swift3.0的新特性
由于是從OC轉(zhuǎn)過(guò)來(lái)的
所以對(duì)MJExtension和ESJsonFormat很有感情
這里分享一下如何在swift環(huán)境下使用MJExtension
所用技術(shù)
- swift
- MJExtension
- ESJsonFormat
- Alamofire
- SwiftyJSON
安裝
使用pod安裝 這里有幾個(gè)坑
- 注意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的類
創(chuàng)建一個(gè).h文件 如Objc-Briding-Header.h
Apple建議使用-Briding-Header字段作為后綴 這里果斷就聽(tīng)蘋(píng)果爸爸的話了
在里面import需要的OC的類
坑:
- 這里的#import 沒(méi)有代碼提示
且無(wú)論是否是什么類型的類 都用
#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之后需要進(jìn)行一些設(shè)置
-
在target——>build setting中搜索bridg 把Objective-C Bridging Header路徑設(shè)置一下,一定要設(shè)置對(duì),如果你的橋接文件不是和project工程文件在同一級(jí)項(xiàng)目目錄中惜傲,要記得把你的文件所在的目錄加進(jìn)路徑讨惩,一定要確保根據(jù)這個(gè)路徑可以找到你的橋接文件吆鹤。如圖
-
設(shè)置一個(gè)User Header Search Paths,否則在需要用三方庫(kù)的地方是調(diào)不出來(lái)的凌摄。在target——>Build Setting里找到search Paths,雙擊User Header Search Paths后面的空白處,設(shè)置目錄路徑為${SRCROOT} 后邊選擇recursive蒋情。如圖
使用
模型的建立
這里很多同學(xué)直接就去建了swift模型,其實(shí)這里應(yīng)該使用OC模型,如果是swift模型,MJExtension可能不能完美的完成轉(zhuǎn)換.而且建立OC模型,可以使用ESJsonFormat來(lái)完成,非常方便.
關(guān)于ESJsonFormat的使用,請(qǐng)參考ESJsonFormat github
使用Alamofire獲取json
Alamofire是OC中著名開(kāi)源網(wǎng)絡(luò)框架AFNetworking的swift版本
關(guān)于Alamofire的使用,請(qǐng)參考Alamofire github
使用SwiftyJSON
SwiftyJSON是swift中著名的json解析工具,使用這個(gè)插件,可以讓json多層連續(xù)解析而不產(chǎn)生crash.
關(guān)于SwiftyJSON的使用,請(qǐng)參考SwiftyJSON github
具體使用代碼例
關(guān)于MJExtension的基本用法(OC),請(qǐng)參考作者的介紹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并取數(shù)組層數(shù)據(jù)
let json = JSON(response.data as Any)
let jsonData = json["goodsRecommendTypeFormBeans"][0]["goodsRecommendFormList"].rawValue
for dic in (jsonData as! Array<Any>){
//字典轉(zhuǎn)為OC字典不然MJExtension不會(huì)進(jìn)行轉(zhuǎn)換
let nsdic = dic as! [NSObject : AnyObject]
//用MJExtension轉(zhuǎn)成OC模型
let model = DemoModelOne.mj_object(withKeyValues: nsdic)
//把模型寫(xiě)入數(shù)組
self.dataArray.append(model!)
}
print(self.dataArray)
completion()
})
}
}
由此,你獲得了一個(gè)裝滿了model的dataArray 盡情折騰吧!