Ошибка xCode: - Невозможно присвоить значение типа 'URL?' набрать 'UIImage?' - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь получить ссылку на изображение из профиля пользователя Firebase.Когда я звоню: -

@IBOutlet weak var profileImage: UIImageView?

profileImage?.image = Auth.auth().currentUser?.photoURL

появляется следующее сообщение об ошибке: -

Cannot assign value of type 'URL?' to type 'UIImage?'

Я пытаюсь использовать исправления, которые предоставляет xcode, но они только приводят к дальнейшим проблемам.

Когда я печатаю: -

print(Auth.auth().currentUser?.photoURL as Any)

Я получаю следующий вывод, так что я знаю, что там есть изображение.

Optional(https://graph.facebook.com/10X60X70X35X101X5/picture)

Как я могу вытащить это изображениеили возможно преобразовать его в строку, чтобы я мог его использовать?

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 09 мая 2018

На самом деле вы конвертируете тип URL в тип UIImage, что невозможно. Вам необходимо загрузить изображение с URL-адреса и установить его в виде изображения или там, где вы хотите использовать.

DispatchQueue.global(qos: .background).async {

                if let url = URL(string: <#imageUrl#>) {

                    do {
                        let imgData = try Data(contentsOf: url)
                        if let image = UIImage(data: imgData) {

                            DispatchQueue.main.async {

                                self.imageView.image = image
                            }
                        }

                    } catch {
                        debugPrint("From catch block: Image could not be downloaded !!")
                    }
                }
            }
0 голосов
/ 09 мая 2018

Невозможно назначить URL для изображения, используйте SDWebImage , чтобы загрузить его асинхронно, чтобы не блокировать основной поток

if let url = Auth.auth().currentUser?.photoURL {

  self.profImageV.sd_setImage(with: url , placeholderImage: UIImage(named: "edit2.png"))

}
0 голосов
/ 09 мая 2018

Сообщение об ошибке очень ясно, вы пытаетесь назначить тип URL? для типа UIImage?. Так как это URL?, вы должны сначала развернуть его и загрузить изображение с этим URL. Когда у вас есть UIimage, вы можете назначить его.

0 голосов
/ 09 мая 2018

Вам необходимо загрузить изображение, а затем установить изображение imageView для загруженного изображения. Вы можете сделать это, используя dataSask URLSession:

// Playground code
import UIKit
import PlaygroundSupport

let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 400, height: 400))

let session = URLSession.shared
let url = URL(string: "http://via.placeholder.com/400x400")!

_ = session.dataTask(with: url) { data, response, error in

    guard error == nil else {
        print(error)
        return
    }

    guard let data = data else {
        print("[DEBUG] - No data returned")
        return
    }

    DispatchQueue.main.async {
        imageView.image = UIImage(data: data)
    }

}.resume()

PlaygroundPage.current.liveView = imageView

Или вы можете использовать библиотеку, такую ​​как KingFisher , чтобы обрабатывать ее для вас, тогда вы просто называете это так:

let url = URL(string: "url_of_your_image")
imageView.kf.setImage(with: url)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...