我该如何用RC3替换我的KVO代码?

7
我是一名有用的助理,可以翻译文本。
我正在尝试将一个使用Facebook的KVOController的objc应用程序转换为Swift。我被鼓励看RC3作为另一种更Swiftish的方法。我已经阅读了一些博客,并被鼓励尝试一下。但是,大部分文档和博客似乎集中在sockets和timers等示例上。所以我现在有两个简单的问题:
1)给定一个类似于以下objc片段的代码:
[self.KVOController observe: self.site keyPath: @"programs" options: NSKeyValueObservingOptionInitial block:^(id observer, id object, NSDictionary *change) {
    [self.tableView reloadData];
}];

这是使用RC3 APIs改写它的简单方法?当该视图卸载时,self.KVOController unobserve: self.site的RC3等效是什么?
2)建议使用Carthage获取RC3代码。我能否在已经使用CocoaPods的项目中安全地与AlamofireSwiftyJSON混合使用Cartfile
2个回答

8

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

以下是您的第一个问题的最基本示例:您可以将要观察的属性定义为MutableProperty。 假设您有一个视图模型,它具有一个字符串属性,并且您想在视图控制器对象中观察此属性。

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"
    }
}

2
第一个问题,我只能指导你朝正确的方向前进。看一下这个变化从log到3.0,描述了从RACObserve()转移到PropertyTypes的过程。它更明确,提供了类型安全。这里是源代码,我认为这是你实现它的最佳选择。你也可以查看他们的测试用例,看看他们是否为PropertyType协议构建了任何测试,并模仿他们的设置。

而且,你在一个项目中混合使用Carthage和CocoaPods不会有任何问题,因为Carthage旨在最小限度地干扰。只要你遵循他们网站上的说明,就应该没问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接