Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 使用联合收割机向前移动对象_Swift_Combine - Fatal编程技术网

Swift 使用联合收割机向前移动对象

Swift 使用联合收割机向前移动对象,swift,combine,Swift,Combine,为了更新视图,我想通过转发将视图从我的ViewController转发到ViewModel 如下所示: viewModel.labelViewModel.subscribe(转发:labelView){labelView,labelView.update中的模型(使用:model)} 但是使用联合收割机 那么,我怎样才能返回观察者和被观察者呢 在ViewController中,我正在尝试: viewModel.$labelModel.sink{lab in 打印(“值:\(实验室?.1.tex

为了更新视图,我想通过转发将视图从我的ViewController转发到ViewModel

如下所示:

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)