【发布时间】:2021-12-23 03:15:37
【问题描述】:
我正在使用 Rxswift 来设计 ViewModel。 下面是我写的代码。 在我的第一个 map 运算符中,使用了 [weak self] 并使用了 guard 来展开值。
我意识到我在第一张地图中展开的“自我”在第二张地图和下面的所有其他运算符中仍然可用。
但我不太清楚为什么第一个 map 运算符中的 unwrapped self 在下面的运算符中仍然可用,以及在其他运算符中使用时是否会出现问题
let textObservable = input.subject
.map { [weak self] _ -> [String] in
guard let self = self else { return [] }
return [$0]
}.map { maps in
maps.map { text -> String in
return self.makeString(string: text)
}
}
【问题讨论】:
-
由于您在
maps.map { ... }闭包中明确引用self和self.makeString(string: text),因此它正在捕获强自引用。它不关心之前地图关闭中的[weak self]。 Rx 在这里无关紧要。 -
这里有什么问题?