它在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函数运行时,屏幕显示的label
为blank
。
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)