Значение по умолчанию для необязательного типа 'URL?' - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть расширение, позволяющее загружать изображения на мой 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...

1 Ответ

0 голосов
/ 02 февраля 2020

Я предлагаю вам использовать POD, который загружает изображения асинхронно и всегда оставляет изображение placeHolder, посмотрите на следующий пример, который его использует:

import SDWebImage

imageView.sd_setImage (
   with: URL (string: "http://www.example.com/image.jpg"), 
   placeholderImage: UIImage (named: "placeholder.png") // define your default Image
)

Ссылка на параметр POD: https://cocoapods.org/pods/SDWebImage

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...