はじめに
こんにちは、nukkyです。
みなさんSwiftでの通信ライブラリは何を使ってますか?
私はAlamofireを使っています、人気・実績ともにありますし情報量も多いです。
今回はそのAlamofireを使ってファイルのDLを行なっていきたいと思います。
前提条件
Xcode 9.x
iOS 11 Simulator
Swift 4.0
今回やること
今回はAlamofireをつかってWeb上のファイルをDLがメインになります、もしAlamofireわかんないとか、普通にAlamofireを使ってAPIにアクセスしたいという方はまた別の機会で紹介します。
準備
今回はCarthageを使用します。
https://github.com/Carthage/Carthage
Cartfileにこちらを記述してください。
1 | github "Alamofire/Alamofire" ~> 4.7 |
そうしたら、以下のコマンドでビルドしてください。
1 | carthage update --platform iOS |
CocoaPodsを使いたい方でも大丈夫です。
Podfileに以下を追加してください。
1 | pod 'Alamofire', '~> 4.7' |
追加したらターミナルから以下のコマンドを実行してください。
1 | pod install |
実装
ファイルのDL
では早速ファイルをDLしていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | func download(fileName: String) { let destination: DownloadRequest.DownloadFileDestination = { _, _ in let documentsURL = FileManager.default.urls(for: .libraryDirectory, in: .userDomainMask)[0] let fileURL = documentsURL.appendingPathComponent(fileName) return (fileURL, [.removePreviousFile, .createIntermediateDirectories]) } Alamofire.download("URL" + fileName, to: destination).response { response in if response.error == nil, let path = response.destinationURL?.path { print("path::::\(path)") } else { // エラー処理 } } } |
まずDownloadFileDestinationを用意します、ここで指定したURLにDLしたファイルが保存されます。
returnで返しているオプションですが以下の内容になります。
.removePreviousFile – 指定されている場合、宛先URLから前のファイルを削除します。
.createIntermediateDirectories – 指定されている場合、宛先URLの中間ディレクトリを作成します。
ファイルのDLですがAlamofireのdownload関数を使用します、DLしたいファイルのURLと先ほど用意したDownloadFileDestinationを渡します。
エラーがない場合はresponseが返却された時点でファイルはDownloadFileDestinationで指定したURLで保存されています。
これだけでファイルのDLは実装完了です、とても簡単ですね!
DLしたファイルへのアクセス
DLしたファイルへのパス取得も書いておきます。
上記download関数でdata.txtをDLしていた場合、以下の処理でファイルパスが取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 | let documentsURL = FileManager.default.urls(for: .libraryDirectory, in: .userDomainMask)[0] // ファイルの存在確認 if( FileManager.default.fileExists(atPath: "data.txt") ) { let filePath = documentsURL.appendingPathComponent("data.txt") // txtだしStringに変換 do { let txtStr = try String(contentsOfFile: filePath, encoding: String.Encoding.utf8) } catch { print("エラー") } } |
さいごに
ファイルのDLとか面倒かなと思ってましたがAlamofireをつかうとものすごく簡単に実装できるので、検討中の方は是非試してみてください。
しかし、ますますAlamofireが手放せなくなってきました、もしSwiftの通信ライブラリでおすすめとかありましたら教えてください!
RE:ENGINESブログ「iOS記事」まとめページはこちらから