gpt4 book ai didi

ios - 如果响应返回 200 以外的状态代码,是否停止我的 NSURLSession?在 SWIFT

转载 作者:可可西里 更新时间:2023-11-01 00:37:04 26 4
gpt4 key购买 nike

我正在尝试使用 NSURLSession 加载图像。如果响应返回 200 以外的状态代码,我该如何“停止”NSURLSession?我想显示网络问题弹出窗口。

class ViewController: UIViewController {

override func viewDidLoad()
{
super.viewDidLoad()
loadData()
}

func loadData()
{
self.downloadFullImageFrom("https://www.google.fr/logos/doodles/2015/holidays-2015-day-3-6399865393250304-5649050225344512-ror.jpg") { image in

dispatch_async(dispatch_get_main_queue())
{
//DO SOMETHING WITH images IF DOWNLOAD IS OK
//HOW CAN I KNOW IF dataTaskWithURL FAILED?
}
}
}

func downloadFullImageFrom(url:String, completion: ((image: UIImage?) -> Void)) {

let task = NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)!) {(data, response, error) in

if let httpResponse = response as? NSHTTPURLResponse
{

if httpResponse.statusCode == 200
{
completion(image: UIImage(data: data!))
}
else { return }
}
}
task.resume()
}
}

最佳答案

尝试使用 guard 来解包你的可选值并添加 where 子句来控制预期结果,如果失败则返回 nil:

func loadData() {
downloadFullImageFrom("https://www.google.fr/logos/doodles/2015/holidays-2015-day-3-6399865393250304-5649050225344512-ror.jpg") { image in
dispatch_async(dispatch_get_main_queue()) {
guard let image = image else {
print("error loading image")
return
}
//DO SOMETHING WITH images IF DOWNLOAD IS OK
print(image.size)
}
}
}
func downloadFullImageFrom(link: String, completion: ((image: UIImage?) -> Void)) {
guard let url = NSURL(string: link) else {
completion(image: nil)
return
}
NSURLSession.sharedSession().dataTaskWithURL(url) {(data, response , error) in
guard
let httpURLResponse = response as? NSHTTPURLResponse where httpURLResponse.statusCode == 200,
let data = data, image = UIImage(data: data) where error == nil else {
// display a network issue pop up
print("======= statusCode =======")
print((response as? NSHTTPURLResponse)?.statusCode)
completion(image: nil)
return
}
completion(image: image)
}.resume()
}

Xcode 8.3.1 • Swift 3.1

func loadData() {
downloadFullImageFrom(link: "https://www.google.fr/logos/doodles/2015/holidays-2015-day-3-6399865393250304-5649050225344512-ror.jpg") { image in
DispatchQueue.main.async() {
guard let image = image else {
print("error loading image")
return
}
//DO SOMETHING WITH images IF DOWNLOAD IS OK
print(image.size)
}
}
}
func downloadFullImageFrom(link: String, completion: @escaping ((UIImage?) -> Void)) {
guard let url = URL(string: link) else {
completion(nil)
return
}
URLSession.shared.dataTask(with: url) { data, response, error in
guard
let httpURLResponse = response as? HTTPURLResponse,
httpURLResponse.statusCode == 200,
let data = data,
let image = UIImage(data: data),
error == nil
else {
// display a network issue pop up
print("======= statusCode =======")
print((response as? HTTPURLResponse)?.statusCode ?? "")
completion(nil)
return
}
completion(image)
}.resume()
}

关于ios - 如果响应返回 200 以外的状态代码,是否停止我的 NSURLSession?在 SWIFT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34465979/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com