Я пытаюсь следовать документации Firebase о том, как отобразить изображение из хранилища Firebase пользователю в приложении. Это та документация ниже:

// Reference to an image file in Firebase Storage
let reference = storageRef.child("images/stars.jpg")

// UIImageView in your ViewController
let imageView: UIImageView = self.imageView

// Placeholder image
let placeholderImage = UIImage(named: "placeholder.jpg")

// Load the image using SDWebImage
imageView.sd_setImage(with: reference, placeholderImage: placeholderImage)

Я пытаюсь сделать это сам:

//get image url from deal
self.ref.child("deals").child("log").child(currentDealView).child("pictures").child(currentImageView).child("imageSelected").child("imageSelected").observeSingleEvent(of: .value) { (snapshot) in
    let imageUrlString = snapshot.value as! String
    let imageUrlUrl = URL(string: imageUrlString)

    print(imageUrlString)
    //prints "deals/log/dealNumber83/pictures/googleScreenshot/imageSelected"

    // Reference to an image file in Firebase Storage
    let reference = self.storageRef.child(imageUrlString)

    // UIImageView in your ViewController
    let viewPicImageView: UIImageView = self.viewPicImageView

    // Placeholder image
    let placeholderImage = UIImage(named: "placeholder.jpg")

    // Load the image using SDWebImage

    viewPicImageView.sd_setImage(with: reference, placeholderImage: placeholderImage)

Но в самой последней строке у меня есть ошибка в «with: reference», говорящая: «Невозможно преобразовать значение типа« StorageReference »в ожидаемый тип аргумента« URL? »». Я не могу найти в Интернете никакой информации о том, как преобразовать StorageReference в URL? Спасибо.

0
user13282025 17 Апр 2020 в 21:01

2 ответа

Лучший ответ

Вы можете использовать это:

let Ref = Storage.storage().reference(forURL: imageUrlUrl)
Ref.getData(maxSize: 1 * 1024 * 1024) { data, error in
    if error != nil {
        print("Error: Image could not download!")
    } else {
        yourImageView.image = UIImage(data: data!)
    }
}

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

1
Picode 17 Апр 2020 в 18:22

Кроме того, в бета-версии FirebaseStorageSwift можно воспользоваться преимуществом типа Swift Result. (Добавьте pod 'FirebaseStorageSwift' в подфайл.)

let Ref = Storage.storage().reference(forURL: imageUrlUrl)
Ref.getData(maxSize: 1 * 1024 * 1024) { result in
  switch result {
  case let .success(data):
    yourImageView.image = UIImage(data: data)
  case let .failure(error):
    print("Error: Image could not download! \(error)")
  }
}
0
Paul Beusterien 17 Апр 2020 в 22:06