2016-12-08 3 views
0

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

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

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

Я достаточно разбираюсь в Android, и я уверен, что библиотека fresco/picasso делает это уже, я думаю, не в iOS.

Может ли кто-нибудь указать мне в правильном направлении?

Спасибо

class PostTableViewCell: UITableViewCell { 

    @IBOutlet weak var fileView: UIImageView! 

    @IBOutlet weak var messageLabel: UILabel! 

    let disposeBag = DisposeBag() 

    var postViewModel: PostViewModel? { 
     didSet { 
      guard let pvm = postViewModel else { 
       return 
      } 

      Alamofire.request(pvm.file).responseImage{ response in 
       if let image = response.result.value { 
        self.fileView.image = image 
        self.fileView.setNeedsLayout() 
       } 
      } 

      pvm.messageText.bindTo(messageLabel.rx.text).addDisposableTo(disposeBag) 
     } 
    } 
} 

class PostViewModel { 
    private let post: Post 
    let disposeBag = DisposeBag() 

    var fileText: BehaviorSubject<String> 
    var messageText: BehaviorSubject<String> 

    var file: String { 
     return post.file! 
    } 

    init(post: Post) 
    { 
     self.post = post 
     fileText = BehaviorSubject<String>(value: post.file!) 
     fileText.subscribe(onNext: {(file) in 
      post.file = file 
     }).addDisposableTo(disposeBag) 

     messageText = BehaviorSubject<String>(value: post.message!) 
     messageText.subscribe(onNext: {(message) in 
      post.message = message 
     }).addDisposableTo(disposeBag) 
    } 
} 
+0

Просмотрите ссылку (https://github.com/Alamofire/AlamofireImage), которая может вам помочь. –

ответ

1

Когда вы что-то скачать, например, с Alamofire. Вы уходите из основного потока (это асинхронное задание). Поэтому, когда вы получаете свои данные, вам нужно снова вернуть его в основной поток.

Вы пробовали:

Alamofire.request(pvm.file).responseImage{ response in 
    DispatchQueue.main.async { 
     if let image = response.result.value { 
      self.fileView.image = image 
      self.fileView.setNeedsLayout() 
     } 
    } 
} 

Кроме того, response.result.value, скорее всего, не является UIImage, но это некоторая форма данных. Я не знаю, что находится внутри вашего response.result.value, но возможно, вам нужно запустить UIImage с помощью init.

if let image = UIImage(data: response.result.value) {   
} 
Смежные вопросы