私は Android から iOS 用の Apple Swift プログラミングを学び始めたところです。基本的には Swift コードを読んだり操作したりできるようになり、iOS Swift プログラミングで使用される一般的なクラスもいくつか学びましたが、構文などについてはまだ混乱しています。
ファイルをダウンロードしようとしています。このURLからダウンロードするとします
var url = "http://www.mywebsite.com/myfile.pdf"
ボタンをクリックするだけで、視覚的な進行も可能
ここで stackoverflow で検索していたところ、偶然 Alamofire を見つけました。試してみるつもりですが、これが私にとって最善の方法かどうかはわかりません。
そこで、目標を達成するために、どのようなオプション(iOS7 と iOS8)を利用できるのか、またその方法を教えてください。また、長所と短所も教えていただけると嬉しいです。
ベストアンサー1
Alamofire を使用しないダウンローダー クラスの例:
class Downloader {
class func load(URL: NSURL) {
let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil)
let request = NSMutableURLRequest(URL: URL)
request.HTTPMethod = "GET"
let task = session.dataTaskWithRequest(request, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
if (error == nil) {
// Success
let statusCode = (response as NSHTTPURLResponse).statusCode
println("Success: \(statusCode)")
// This is your file-variable:
// data
}
else {
// Failure
println("Failure: %@", error.localizedDescription);
}
})
task.resume()
}
}
独自のコードでこれを使用する方法は次のとおりです。
class Foo {
func bar() {
if var URL = NSURL(string: "http://www.mywebsite.com/myfile.pdf") {
Downloader.load(URL)
}
}
}
Swift 3 バージョン
また、大きなファイルはメモリではなくディスクにダウンロードすることに注意してください。`downloadTask: を参照してください。
class Downloader {
class func load(url: URL, to localUrl: URL, completion: @escaping () -> ()) {
let sessionConfig = URLSessionConfiguration.default
let session = URLSession(configuration: sessionConfig)
let request = try! URLRequest(url: url, method: .get)
let task = session.downloadTask(with: request) { (tempLocalUrl, response, error) in
if let tempLocalUrl = tempLocalUrl, error == nil {
// Success
if let statusCode = (response as? HTTPURLResponse)?.statusCode {
print("Success: \(statusCode)")
}
do {
try FileManager.default.copyItem(at: tempLocalUrl, to: localUrl)
completion()
} catch (let writeError) {
print("error writing file \(localUrl) : \(writeError)")
}
} else {
print("Failure: %@", error?.localizedDescription);
}
}
task.resume()
}
}