проблема с кешем изображений при получении изображения - PullRequest
0 голосов
/ 07 июня 2019

enter image description here [enter image description here] [! Я хочу загрузить изображение из URL-адреса загрузки из firebase, используя кеш изображений, как я могу создать наследство, в котором загружается мое изображение, я думаю, что мне не хватает концепции ООПгде-то.мой вид изображения - метка смахивания, как тоже создать экземпляр, где я могу отображать изображение на моем виде.

import UIKit

import Firebase

class swipeLabelViewController: UIViewController {

@IBOutlet weak var UserAgeText: UILabel!


var user:User? {

    didSet {


        let userNameSwipe = user?.userName

        userNameLabel.text = userNameSwipe

        let userAgeSwipe = user?.userAge

        UserAgeText.text = userAgeSwipe

        guard let profileImageUrl = user?.profileImageUrl else { 

return} profileImageView.loadImage (with: profileImageUrl)

        print(profileImageUrl)

  //  let userFetchedImage = user?.profileImageUrl

     //   swipeLabel.image = userFetchedImage

       // self.swipeLabel.image = UIImage(contentsOfFile: profileImageUrl)

     }
}
var profileImageView: CustomImageView = {


    let iv = CustomImageView()


    return iv

}()


var imageI : UIImage!

// var swipepic = CustomImageView ()

@IBOutlet weak var swipeLabel: UIImageView!


@IBOutlet weak var userNameLabel: UILabel!




override func viewDidLoad() {


    super.viewDidLoad()


   swipeLabel.image = imageI


    let gesture = UIPanGestureRecognizer(target: self, action: 

селектор (wasDragged (gestRecognizer:)))

 swipeLabel.addGestureRecognizer(gesture)



 fetchCurrentUserData() 


    }

// класс модели пользователя``

class User {

// attributes getting users info  so i can set up  from  firebase





var userName:String!


var userAge:String!


var uid:String!


var profileImageUrl: String!

init (uid: String, dictionary: Dictionary) {

self.uid = uid

if let userName = dictionary [ "userName" ] as? String{


    self.userName = userName

}

if let userAge = dictionary [ "userAge" ] as? String{


    self.userAge = userAge
}

если разрешеноprofileImageUrl = словарь ["profileImageURL"] как?Строка {

  self.profileImageUrl = profileImageUrl

}

}
}

// и, наконец, класс кэша изображений customImageView

import Foundation

import UIKit

var imageCache = String: UIImage

класс CustomImageView: UIImageView {

var lastImgUrlUsedToLoadImage: String?


func loadImage(with urlString: String) {


    // set image to nil


    self.image = nil

    // set lastImgUrlUsedToLoadImage


    lastImgUrlUsedToLoadImage = urlString


    // check if image exists in cache


    if let cachedImage = imageCache[urlString] {


        self.image = cachedImage

        return
    }

    // url for image location




    guard let url = URL(string: urlString) else { return }





    // fetch contents of URL


    URLSession.shared.dataTask(with: url) { (data, response, error) in

        // handle error


        if let error = error {


            print("Failed to load image with error", 

error.localizedDescription)}

        if self.lastImgUrlUsedToLoadImage != url.absoluteString {

            return
        }

        // image data
        guard let imageData = data else { return }



        // create image using image data


        let photoImage = UIImage(data: imageData)



        // set key and value for image cache


        imageCache[url.absoluteString] = photoImage


        // set image

        DispatchQueue.main.async {

            self.image = photoImage
        }

        }.resume()
}

}

без ошибокЯ просто не вижу изображения на своем свайпеле UIImage

1 Ответ

0 голосов
/ 20 июня 2019

Вам нужно сделать отдельный запрос на загрузку изображения с URL-адреса, который возвращает firebase.Вот пример детской площадки:

//: A SpriteKit based Playground

import PlaygroundSupport
import UIKit

enum ImageDownloadError: Error {
  case failedToConvertDataToImage
}

func dowloadImage(from url: URL, completion: @escaping (Result<UIImage, Error>) -> Void) {
  let task = URLSession.shared.dataTask(with: url) { data, response, error in
    guard let image = data.flatMap(UIImage.init(data:)) else {
      return completion (.failure(error ?? ImageDownloadError.failedToConvertDataToImage))
    }
    completion(.success(image))
  }.resume()
}

let imageView = UIImageView()
dowloadImage(from: URL(string: "https://res.cloudinary.com/demo/image/upload/sample.jpg")!) { [weak imageView] result in
  switch result {
  case .failure(let error):
    print(error.localizedDescription)
  case .success(let image):
    imageView?.image = image
  }
}
imageView.frame = .init(origin: .zero, size: .init(width: 300, height: 300))
PlaygroundPage.current.liveView = imageView
PlaygroundPage.current.needsIndefiniteExecution = true

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