У меня есть расширение, позволяющее загружать изображения на мой UITableView
из API.
extension UIImageView {
func donwloadImage(from url: String) {
let urlRequest = URLRequest(url: URL(string: url)!)
let task = URLSession.shared.dataTask(with: urlRequest) { (data,response,error) in
if error != nil {
print(error)
return
}
DispatchQueue.main.async {
self.image = UIImage(data: data!)
}
}
task.resume()
}
}
Приложение вылетает, если imageUrl
равно nil
.
Как мне оберните его, используя ??
, чтобы UIImageView
было пустым, если изображения нет?
Это модель данных и функция выборки данных
class Article: NSObject {
var headline: String?
var date: String?
var imageUrl: String?
var desc: String?
var url: String?
}
@objc func fetchArticles() {
let urlRequest = URLRequest(url: URL(string: "https://newsapi.org/v2/everything?pageSize=15&sortBy=publishedAt&apiKey=API_KEY")!)
let task = URLSession.shared.dataTask(with: urlRequest) { (data,response,error) in
if error != nil {
print(error)
return
}
self.articles = [Article]()
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! [String: AnyObject]
if let articlesFromJson = json["articles"] as? [[String: AnyObject]] {
for articlesFromJson in articlesFromJson {
let article = Article()
if
let title = articlesFromJson["title"] as? String,
let publishedAt = articlesFromJson["publishedAt"] as? String,
let urlToImage = articlesFromJson["urlToImage"] as? String,
let description = articlesFromJson["description"] as? String,
let url = articlesFromJson["url"] as? String
{
article.headline = title
article.date = publishedAt
article.imageUrl = urlToImage
article.desc = description
article.url = url
}
self.articles?.append(article) // and so on...