RACObserve没有给出价值。 (Reactive Cocoa with Swift)

时间:2015-07-27 07:47:39

标签: swift reactive-cocoa

dynamic var categories: [Category]?
dynamic var productViewModels: [ProductViewModel]?

var totalCategories = 1

dynamic var currentPage = 0

override init() {
    super.init()

    RACObserve(self, "categories").subscribeNext { [weak self] (x) in
        if let this = self, let categories = x as? [Category] {
            this.totalCategories = categories.count ?? 1 // Why this code doesn't work?
            this.productViewModels = categories.map { ProductViewModel(category: $0.tagName) }
            this.currentPage = 0
        }
    }

    categories = Category.temporaryInitializer()
}

我认为如果x有一些价值,RACObserve(self, "categories")将使用包含categories的值。但它没有任何价值。 我不知道为什么x总是nil

======解决问题======

categories = Category.temporaryInitializer()不应该在init()

我猜RACObserveinit()工作正常。

但我仍然不知道为什么。

1 个答案:

答案 0 :(得分:1)

根据Apple Documentation

  

当您为存储属性指定默认值或在初始化程序中设置其初始值时,将直接设置该属性的值,而不调用任何属性观察者。

反应观察员致力于KVO。我想这就是你的观察者没有被召唤的原因。