Swift 使用联合收割机向前移动对象
为了更新视图,我想通过转发将视图从我的ViewController转发到ViewModel 如下所示:Swift 使用联合收割机向前移动对象,swift,combine,Swift,Combine,为了更新视图,我想通过转发将视图从我的ViewController转发到ViewModel 如下所示: viewModel.labelViewModel.subscribe(转发:labelView){labelView,labelView.update中的模型(使用:model)} 但是使用联合收割机 那么,我怎样才能返回观察者和被观察者呢 在ViewController中,我正在尝试: viewModel.$labelModel.sink{lab in 打印(“值:\(实验室?.1.tex
viewModel.labelViewModel.subscribe(转发:labelView){labelView,labelView.update中的模型(使用:model)}
但是使用联合收割机
那么,我怎样才能返回观察者和被观察者呢
在ViewController中,我正在尝试:
viewModel.$labelModel.sink{lab in
打印(“值:\(实验室?.1.text)”)
}.store(位于:&订阅中)
使用ViewModel中的标签:
@Published private(set)var labelModel:(Label,Label.Model)?
但我想做的是在接收器中返回与从ViewController订阅相同的标签
这可能吗?您可以通过以下方式实现:
extension Publisher {
func withUnretained<Object: AnyObject>(_ obj: Object) -> AnyPublisher<(Object, Output), Error> {
return tryMap { [weak obj] element -> (Object, Output) in
guard let obj = obj else { throw UnretainedError.failedRetaining }
return (obj, element)
}
.eraseToAnyPublisher()
}
}
enum UnretainedError: Swift.Error {
case failedRetaining
}
但既然你可以这么做,为什么还要这么做呢
$labelModel
.sink { [label] text in
label?.text = text
}
.store(in: &subscriptions)
$labelModel
.sink { [label] text in
label?.text = text
}
.store(in: &subscriptions)