7

我正在尝试将使用 Facebook 的 KVOController 的 objc 应用程序移植到 Swift。我被鼓励将RC3视为另一种更 Swiftish 的方法。我已经阅读了一些博客,并鼓励我尝试一下。但是许多文档和博客似乎都集中在套接字和计时器上作为示例。所以我现在有两个简单的问题:

1)给定一个objc片段,如:

[self.KVOController observe: self.site keyPath: @"programs" options: NSKeyValueObservingOptionInitial block:^(id observer, id object, NSDictionary *change) {
    [self.tableView reloadData];
}];

用 RC3 API 重写它的简单方法是什么?self.KVOController unobserve: self.site当该视图卸载时发生的 RC3 等效项是什么?

2) 推荐我使用Carthage 来抓取RC3 代码。我可以将 a 与已经使用可可豆荚的项目安全地混合在一起Cartfile吗?AlamofireSwiftyJSON

4

2 回答 2

8

免责声明 :) 我对整个 ReactiveCocoa 概念,尤其是 RAC 3 也是新手。我正在使用新框架来学习,所以我的解决方案可能不是 API 的预期用途。我很乐意收到其他人的反馈并以正确的方式学习。

对于您的第一个问题,我可以提出以下建议:您可以将要观察的属性定义为 MutableProperty。下面是带有 String 属性的最基本示例。假设你有一个视图模型,它有一个 String 属性,并且你想在你的视图控制器对象中观察它。

ViewModel.swift

class ViewModel {
    var testProp = MutableProperty<String>("")
}

ViewController.swift

class ViewController: UIViewController {
    private let viewModel = ViewModel()

    override func viewDidLoad() {
        super.viewDidLoad()

        let testPropObserver = viewModel.testProp.producer
            testPropObserver.start(next: {value in
                println("new value \(value)")
            })

        viewModel.testProp.value = "you should see this in your log"
    }
}
于 2015-05-08T18:29:02.310 回答
2

对于第一个问题,我只能引导您朝着正确的方向前进。查看 3.0 的更改日志,描述从 RACObserve() 到 PropertyTypes 的转变。它更明确一点,并提供类型安全。是源代码,我认为这是您弄清楚如何实现它的最佳选择。您还可以查看他们的测试用例,看看他们是否为 PropertyType 协议构建了任何测试,并模仿他们是如何设置它的。

是的,在一个项目中混合 Carthage 和 CocoaPods 不会有任何问题,因为 Carthage 的设计目的是尽量减少干扰。只要您按照他们网站上的说明进行操作就可以了。

于 2015-05-07T18:39:54.217 回答