RxSwift 是目前很常用的第三方元件,Alamofire 則是很常見的網路服務元件,而 RXAlamofire 則是將RxSwift 和Alamofire 整合而成的一個套件。而我們如何使用RXAlamofire 下載檔案呢?其實蠻簡單的唷!
首先,我們先引入這個 extension,這是個將字串轉成網址的擴充,接下來的程式碼會用到。
public extension String {
var url: URL? {
URL(string: self)
}
}
再來,我們就來下載檔案囉,只要使用 RxAlamofire.download 這個函式就可以囉!
private func downloadJSONData(){
let urlStr = "網址"
guard let url = urlStr.url else {return}
RxAlamofire.download(URLRequest(url: url)) { URL, HTTPURLResponse in
let docsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let filename = "/Download/download.json" //要儲存的檔名,可以含路徑
let fileURL = docsURL.appendingPathComponent(filename)
return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
}
.subscribe(onCompleted: {[weak self] in
_ = self?.readJSONData() // 下載完成,解析 JSON 檔案
print("Download complete")
}
)
.disposed(by: disposeBag)
}
而如何解析 JSON 檔案呢,其實也很簡單,這裡有使用到 SwiftyJSON 這個套件,幫助我們來解析 JSON。
private func readJSONData() -> JSON{
let docsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let filename = "/Download/download.json" //要開啟的檔名,可以含路徑
let fileURL = docsURL.appendingPathComponent(filename)
guard let data = try? Data(contentsOf: fileURL) else{
return nil
}
return try? JSON(data: data)
}
是不是相當容易呢?如果有在用RxSwift 的朋友,不可以錯過,如果沒在用 RxSwift 的同學,也可以利用這個方式下載檔案