我怎么能抓住@Published已经改变与组合?(UIKit)



它在CarDetailViewModel中的@Published变量中获取数据,但我无法将该变量中的数据传递给ViewController中的变量。

ViewModel:

class CarDetailViewModel: ObservableObject {
@Published var carDetail: Car = Car(brand: "", features: CarFeatures(model: "", km: 0, year: 0, price: 0, image: "", gearType: "", fuelType: "", carVersion: ""))

private var anyCancellable = Set<AnyCancellable>()
var carSubject = PassthroughSubject<Car, Never>()

func prepareCarDetail() {
carSubject
.sink {[weak self] car in
self?.carDetail = car
print("car: (self?.carDetail)") // it is working.
}
.store(in: &anyCancellable)
}
}

ViewController:

assignmentDataToUI函数运行时,屏幕显示的labelblank

class CarDetailViewController: UIViewController {

@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var brandLabel: UILabel!
@IBOutlet weak var modelLabel: UILabel!
@IBOutlet weak var gearTypeLabel: UILabel!
@IBOutlet weak var fuelTypeLabel: UILabel!
@IBOutlet weak var priceLabel: UILabel!

var carDetailViewModel = CarDetailViewModel()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.

}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

carDetailViewModel.prepareCarDetail()
assignmentDataToUI()

}

func assignmentDataToUI() {
brandLabel.text = carDetailViewModel.carDetail.brand
}
}

我听了carDetail in ViewModel with sink.

carDetailViewModel.$carDetail
.sink {[weak self] car in
guard let self = self else { return }
self.assignmentDataToUI()
}
.store(in: &anyCancelable)

In ViewModel

@Published var text: String = "befor"

在ViewController

private var cancellables = Set<AnyCancellable>()
......
viewModel.$text.sink { text in
print(text)
}.store(in: &cancellables)

最新更新