在 RxSwift 中修改 behaviorRelay 数组内的属性

Posted

技术标签:

【中文标题】在 RxSwift 中修改 behaviorRelay 数组内的属性【英文标题】:Modify property inside of a behaviourRelay array in RxSwift 【发布时间】:2019-10-09 00:10:12 【问题描述】:

我有一个使用 RxSwift 定义的数组

public var calendarNDays = BehaviorRelay<[CalendarControlDayModel]>(value: [])

CalendarControlDayModel 结构如下。

struct CalendarControlDayModel 
        var date: String = ""
        var day: Int = 0
        var name: String = "" 

一旦 calendarNDays 在某个时间点用元素更新,我想修改数组中第 i 个元素的 name 属性。

喜欢self.calendarNDays.value[i].name = "Nancy"。但是,我收到编译错误“无法分配给属性:'value' 是 get-only 属性”。

在行为中继数组中修改元素的特定属性的方法是什么?

【问题讨论】:

【参考方案1】:

正如编译器所建议的那样,BehaviorRelay 中的 value 是一个只读属性。

因此,为了对数组进行更改,您首先需要复制它并使用accept 方法来反映更改。

类似于

var update = calendarNDays.value
update[i].name = “Nancy”
calendarNDays.accept(update)

【讨论】:

以上是关于在 RxSwift 中修改 behaviorRelay 数组内的属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在 RxSwift 中取消订阅 Observable?

RxSwift + UITableViewCell 如何在 heightForRowAt 中获取单元格对象

在 RxSwift 4.0.0 中正确使用 retryWhen 运算符

RxSwift 映射问题

不能在 DelegateProxyType (rxSwift) 中使用 proxyForObject 函数

RxSwift 系列