使用合并转发对象

斯蒂文丘蒂斯

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

类似于以下内容:

viewModel.labelViewModel.subscribe(forward: labelView) { labelView, model in labelView.update(with: model) }

但使用合并。

那么我该如何将观察者返回观察者呢?

在ViewController中,我正在尝试:

viewModel.$labelModel.sink { lab in
    print("Value: \(lab?.1.text)")            
}.store(in: &subscriptions)

在ViewModel中带有标签:

@Published private(set) var labelModel: (Label, Label.Model)?

但是我要做的实际上是在接收器中返回与从ViewController订阅相同的标签。

这可能吗?

丹尼尔T.

您可以通过以下方式进行操作:

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
    .withUnretained(label)
    .sink { (completion) in
        if case .failure = completion {
            print("oops!")
        }
    } receiveValue: { (label, text) in
        label.text = text
    }
    .store(in: &subscriptions)

但是,为什么只要您能做到所有这些呢?

$labelModel
    .sink { [label] text in
        label?.text = text
    }
    .store(in: &subscriptions)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用合并转发对象

来自分类Dev

单例,奇怪地重复使用模板模式并转发构造函数参数

来自分类Dev

使用STL容器转发对象的声明

来自分类Dev

如何使用Azure Notification Hubs从事件中心接收消息并转发到android应用程序?

来自分类Dev

使用lodash合并数组的对象

来自分类Dev

如何使用JavaScript合并对象?

来自分类Dev

如何使用JavaScript合并对象?

来自分类Dev

合并对象数组,并使用相同的键合并对象内部的数组

来自分类Dev

SQL:嵌套合并并转换

来自分类Dev

如何正确启动进程并转发stdin / stdout / stderr?

来自分类Dev

检查空白处的管道输入并转发

来自分类Dev

下载文件并转发到 Struts 中的页面

来自分类Dev

使用条件合并数组中的连续对象并更新合并的元素

来自分类Dev

使用淘汰合并将历史状态对象与构造函数合并

来自分类Dev

使用不可变的js合并对象

来自分类Dev

使用Lodash合并共享键值对上的对象

来自分类Dev

无法使用Angular.merge()合并对象

来自分类Dev

无法使用合并值设置对象值

来自分类Dev

使用Lodash按属性合并对象数组

来自分类Dev

使用相同的键合并对象数组

来自分类Dev

使用JavaScript在JSON中合并对象

来自分类Dev

使用Sanctuary.js合并多个对象

来自分类Dev

使用Lodash合并共享键值对上的对象

来自分类Dev

通过使用Lodash合并复杂对象的数组

来自分类Dev

使用lodash合并对象并置值

来自分类Dev

使用java8合并对象

来自分类Dev

C# 使用 automapper 合并对象

来自分类Dev

确定对象的类型并转换为类型

来自分类Dev

连接两个表,合并并转置结果