簡體   English   中英

我何時/必須將ReactiveCocoa對象聲明/實例化為存儲的屬性而不是局部變量?

[英]When should/must I declare/instantiate ReactiveCocoa objects as stored properties versus local variables?

(適用於ReactiveCocoa 4或3)

在我看到的大多數示例和案例中,將用戶界面連接到數據所涉及的ReactiveCocoa對象(例如MutableProperty<TVal, TErr>SignalProducer<TVal, TErr>至少在某些setupBindings或構造函數中調用的類似方法中實例化。 。

我遇到過幾種情況,當我將對象的聲明從作用域移動到存儲的屬性時,我突然有了一些無法工作的代碼,這些代碼突然“起作用”,反之亦然。 例如,用偽代碼:

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對象...

  1. 什么時候應該將其聲明為屬性( letvar )與局部實例變量?
  2. 我應何時將其實例化為屬性與實例的存儲,計算或其他變體
  3. 什么時候應該return函數?

MutableProperty是一個class 換句話說:它具有參考語義。 Signal (生命周期取決於終止事件 )不同, property的生命周期由所有者定義。 如果沒有對象持有對屬性的引用,則將其釋放。

因此,您問題的答案通常是將其存儲在另一個類中。

常見的做法是將MutableProperty private ,並且只公開可讀的內容:

final class Owner {
    private let mutableProperty = MutableProperty<Type?>(nil)
    public var property: AnyProperty<Type?> {
        return AnyProperty(self.mutableProperty)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM