2016-12-08 4 views
0

Hier ist der Code, den ich bisher habe. Ich bin ziemlich neu mit swift also bitte mit mir blank.Wie kann ich Bilder mit RxSwift und Alamofire herunterladen?

Ich habe einige Probleme mit dem Bild auch wenn ich versuche, nach dem Laden der Bilder zu scrollen.

Ich recherchierte über das falsche Bild angezeigt und ich denke, ich muss das Bild, das geladen wurde, zwischengespeichert werden. Ist das der übliche Weg, dies zu tun?

Ich bin recht gut in Android und ich bin mir ziemlich sicher, die Fresko/Picasso-Bibliothek tun dies bereits, was ich denke, ist nicht in iOS.

Kann mir jemand in die richtige Richtung zeigen?

Danke

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

Bitte überprüfen Sie den Link (https://github.com/Alamofire/AlamofireImage), der Ihnen helfen kann. –

Antwort

1

Wenn Sie etwas, zum Beispiel mit Alamofire herunterladen. Du gehst aus dem Hauptthread (es ist ein asynchroner Job). Wenn Sie also Ihre Daten erhalten, müssen Sie sie erneut zum Hauptthread zurückschieben.

Haben Sie versucht:

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

Auch die response.result.value höchstwahrscheinlich nicht ein UIImage ist, aber es ist eine Art von Daten. Ich weiß nicht, was in Ihrem response.result.value ist, aber es ist möglich, dass Sie Ihre UIImage mit der Dateninitialisierung initiieren müssen.

if let image = UIImage(data: response.result.value) {   
} 
Verwandte Themen