簡體   English   中英

如何使用rxswift將圖像綁定到UIImageView?

[英]How to bind image to UIImageView with rxswift?

我有viewModel:

class EditFoodViewViewModel {
    private var food: Food

    var foodImage = Variable<NSData>(NSData())

    init(food: Food) {
        self.food = food
        self.foodImage.value = food.image!
    }
}

和ViewController:

class EditFoodViewController: UIViewController {
    public var food: EditFoodViewViewModelType?
    @IBOutlet weak var foodThumbnailImageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        guard let foodViewModel = food else { return }
        foodViewModel.foodImage.asObservable().bind(to: foodThumbnailImageView.rx.image).disposed(by: disposeBag)
  }
}

在viewController的最后一行(我的UIImageView所在的行)中,出現一個get錯誤:

無法推斷出通用參數“ Self”

如何解決我的問題? 如何使用rxSwift將圖像設置為imageView?

幾乎總是看到錯誤:“無法推斷出通用參數'Self'”,這意味着類型是錯誤的。 在這種情況下,您嘗試將Observable<NSData>綁定到Observable<Image?>

您的代碼還有其他一些問題。

  • var關鍵字定義Subject類型的情況非常罕見,這不是那些罕見的情況之一。 您的foodImage應該是let而不是var

  • 不建議使用Variable 不要使用它。 在這種情況下,您甚至根本不需要主題。

  • NSData在現代Swift中也不適當。 改用Data

根據您在此處顯示的內容,我希望您的代碼看起來像這樣:

class EditFoodViewViewModel: EditFoodViewViewModelType {
    let foodImage: Observable<UIImage?>

    init(food: Food) {
        self.foodImage = Observable.just(UIImage(data: food.image))
    }
}

class EditFoodViewController: UIViewController {

    @IBOutlet weak var foodThumbnailImageView: UIImageView!
    public var food: EditFoodViewViewModelType?
    private let disposeBag = DisposeBag()

    override func viewDidLoad() {
        super.viewDidLoad()

        guard let foodViewModel = food else { return }
        foodViewModel.foodImage
            .bind(to: foodThumbnailImageView.rx.image)
            .disposed(by: disposeBag)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM