如何在swift中使用RACObserve

时间:2017-10-31 18:41:58

标签: objective-c swift restkit reactive-cocoa

这个新的现有项目正在使用Objective-C Code和RACObserve(Reactive cocoa)来读取api响应。 我想将obj-c转换为swift。

目前的Obj-c实施是:

@interface ObjCTableViewCell : UITableViewCell
@property (nonatomic, strong) OfferPersonal *offer;

@end

.m class->

- (void)bindToModel {

    [RACObserve(self, offer.lender.name) subscribeNext:^(id x) {
        self.nameLabel.text = x;
    }];
}

控制器 - >

{
ObjCTableViewCell TableViewCell *myCell;
        myCell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
        [myCell setValue:self.offer forKey:@"offerPersonal"];

        [myCell bindToModel];
}

现在如何在Swift中使用RACObserve。我试图在其他地方搜索它。 (http://blog.scottlogic.com/2014/07/24/mvvm-reactivecocoa-swift.html)could完全不明白。

1 个答案:

答案 0 :(得分:0)

使用ReactiveSwift的新项目是否在Swift中重写了所有内容(模型,单元格,视图控制器)?如果没有,您可以使用ReactiveObjcBridge从Swift调用旧的ReactiveCocoa ObjC库。

如果是,您应该使用nameMutableProperty<String> String属性替换为<~,并且可以绑定到MutableProperty - 两个选项是:

a:绑定运算符nameLabel.reactive.text <~ offer.lender.name

offer.lender.name.signal.observeValues { (value: String) in nameLabel.text = value }

b:通过访问其信号

.signal.take(first: 1).observeValues { ... }

此外,根据属性的更新次数,您可能希望将观察限制为仅一个值,例如signal.take(until: reactive.prepareForReuse)1