(适用于ReactiveCocoa
4或3)
在我看到的大多数示例和案例中,ReactiveCocoa
MutableProperty<TVal, TErr>
对象(如SignalProducer<TVal, TErr>
或setupBindings
所涉及的用户界面与数据的连接至少在某些{{1}中实例化或者在构造函数中调用的类似方法。
我遇到过几种情况,当我将对象的声明从作用域移动到存储属性时,我的非工作代码突然“正常工作”,反之亦然。例如,在伪代码中:
class Wtf {
// doesn't work
init() {
let prop = MutableProperty<Dah, Dah>()...
doSomethingWith(prop)
}
// also doesn't work
private let prop: MutableProperty<Dah, Dah> = MutableProperty<Dah, Dah>(Dah())
init() {
doSomethingWith(prop)
}
// works?
private let prop: MutableProperty<Dah, Dah>
init() {
prop = MutableProperty<Dah, Dah>(Dah())
doSomethingWith(prop)
}
}
所以似乎有几个基本问题。
给出一些ReactiveCocoa
对象......
let
或var
)与本地实例变量?return
?答案 0 :(得分:0)
MutableProperty
是class
。换句话说:它具有引用语义。
与Signal
(其生命周期depends on a termination event)不同,property
的生命周期由所有者定义。如果没有对象持有对属性的引用,则将对其进行解除分配。
因此,您的问题的答案通常是将其存储在另一个类中。
常见的做法是保留MutableProperty
private
,只展示一个可读的:
final class Owner {
private let mutableProperty = MutableProperty<Type?>(nil)
public var property: AnyProperty<Type?> {
return AnyProperty(self.mutableProperty)
}
}