问题描述
我刚从安卓开始学习苹果 Swift 的 iOS 编程.我现在基本上可以阅读和操作 swift 代码,还学习了一些在 iOS swift 编程中使用的常见类,但仍然对语法和一切有一些困惑.
I just started learning apple swift programming for iOS coming from android. I basically can now read and manipulate swift code and also learned some common classes used in iOS swift programming but still having some confusion with the syntax and everything.
我正在尝试下载文件.就像,让我们说来自这个网址
I'm trying to download file. Like, lets just say coming from this URL
var url = "http://www.mywebsite.com/myfile.pdf"
点击按钮.也许视觉上也有进步
in a button click. Maybe with visual progress too
通过在 stackoverflow 中搜索,我偶然发现了 Alamofire.我可能会尝试,但我不确定这对我来说是否是最好的方法.
Through searching here in stackoverflow, I stumbled upon Alamofire. I might try it but I'm not sure if this is the best way for me to do it.
所以,我想问一下我的选择(iOS7 和 iOS8)如何以及如何实现我的目标.此外,利弊都会很棒!
So, I would like to ask how and what are my options (iOS7 and iOS8) in achieving my goal. Also, pros and cons would be awesome!
推荐答案
没有 Alamofire 的下载器类示例:
Example downloader class without 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()
}
}
这是如何在您自己的代码中使用它:
This is how to use it in your own code:
class Foo {
func bar() {
if var URL = NSURL(string: "http://www.mywebsite.com/myfile.pdf") {
Downloader.load(URL)
}
}
}
Swift 3 版本
还要注意将大文件下载到磁盘而不是内存中.见`下载任务:
Also note to download large files on disk instead instead in memory. see `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()
}
}
这篇关于如何快速下载文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!