gpt4 book ai didi

error-handling - 从网址安全加载图片的最佳做法

转载 作者:行者123 更新时间:2023-12-03 08:51:54 27 4
gpt4 key购买 nike

我有以下代码片段可从url加载图像:

let url = NSURL(string: imageUrl)
let data = NSData(contentsOfURL: url!)
let image = UIImage(data: data!)

如果我的变量 imageUrl具有有效的字符串值,那么保护此代码免受可能的边缘情况影响的最安全方法是什么?

以下代码似乎不太方便:
if let url = NSURL(string: imageUrl) {
if let data = NSData(contentsOfURL: url) {
if let image = UIImage(data: data) {
// success -> do something with the image...
}
else {
// print error message
}
}
else {
// print error message
}
}
else {
// print error message
}

最佳答案

最佳做法是而不是,以使用contentsOfURL之类的同步方法从网络上加载数据。

推荐的方法是NSURLSession,它可以异步工作。

这是一个简单的示例,其中包含完成块和具有关联类型的枚举,
捕获所有可能的错误

enum Result {
case Success(UIImage), Failure(NSString)
}

func loadImage(string : String, completion: (Result) -> ()) {
guard let url = NSURL(string: string) else {
completion(.Failure("Bad URL"))
return
}
NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) in
if error != nil {
completion(.Failure(error!.localizedDescription))
} else {
guard let image = UIImage(data: data!) else {
completion(.Failure("Could not load image data"))
return
}
completion(.Success(image))
}
}.resume()
}

调用它:
loadImage("http://myserver.com/path/to/image.png") { result in
switch result {
case .Success(let image) :
// do something with the image
case .Failure(let error) :
print(error)
}
}

关于error-handling - 从网址安全加载图片的最佳做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38345177/

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