标签: reactive-cocoa

如何从ReactiveCocoa信号中获取"旧值"?

如果我像这样使用RACable:

[RACAbleWithStart(self.myProp) subscribeNext:^(id x) {
   // Do stuff

}];
Run Code Online (Sandbox Code Playgroud)

如何才能访问myProp的旧值(在更改之前导致信号触发)?所以我可以像这样访问它:

[RACAbleWithStart(self.myProp) subscribeNext:^(id x) {
   // Do stuff
   id newValue = x;
   id oldValue = RAC_oldValue;
}];
Run Code Online (Sandbox Code Playgroud)

objective-c key-value-observing reactive-programming ios reactive-cocoa

9
推荐指数
1
解决办法
2980
查看次数

使用ReactiveCocoa链接来自对象数组的异步操作

我有一个实体数组,我想对实体执行异步操作.应该链接操作并以与阵列中的实体相同的顺序运行.我是RAC的新手.如何在RAC中做到这一点?

objective-c ios reactive-cocoa

9
推荐指数
1
解决办法
4819
查看次数

在没有GIDSignInButton的情况下以编程方式启动Google Signin

有没有办法以编程方式启动Google SignIn而无需按下GIDSignInButton?

我正试图在用户必须登录的谷歌api周围打一个信号.

有点 :

googleSignInSignal().then(getPersonalDataSignal)
Run Code Online (Sandbox Code Playgroud)

reactive-programming ios reactive-cocoa swift google-signin

9
推荐指数
2
解决办法
4697
查看次数

在类型中找不到枚举案例开关

有人可以帮我这个.

我有以下内容 public enum

public enum OfferViewRow {
    case Candidates
    case Expiration
    case Description
    case Timing
    case Money
    case Payment

}
Run Code Online (Sandbox Code Playgroud)

以下mutableProperty:

private let rows = MutableProperty<[OfferViewRow]>([OfferViewRow]())
Run Code Online (Sandbox Code Playgroud)

在我的init文件中,我使用一些reactiveCocoa来设置我的MutableProperty:

rows <~ application.producer
    .map { response in
        if response?.application.status == .Applied {
            return [.Candidates, .Description, .Timing, .Money, .Payment]
        } else {
            return [.Candidates, .Expiration, .Description, .Timing, .Money, .Payment]
        }
}
Run Code Online (Sandbox Code Playgroud)

但现在问题是,当我试图在我的行中获取枚举的值时,它会抛出错误.请看下面的代码.

 func cellViewModelForRowAtIndexPath(indexPath: NSIndexPath) -> ViewModel {
        guard
            let row = rows.value[indexPath.row],
            let response = self.application.value
            else {
                fatalError("")
        }

        switch row …
Run Code Online (Sandbox Code Playgroud)

enums ios reactive-cocoa swift swift2

9
推荐指数
1
解决办法
5730
查看次数

每当ReactiveCocoa 5中的UITextField文本属性发生更改时,如何获取信号

如何从用户启动和以编程方式更改UITextField text属性获得信号?通过continuousTextValues仅在用户启动更改时使用报告信号.如果以textField.text编程方式设置,则不会触发信号.

这就是我使用的方式continuousTextValues:

textField.reactive.continuousTextValues.observeValues { value in
    print("Value: \(value)")
}
Run Code Online (Sandbox Code Playgroud)

如果我text手动设置它不会被触发:

textField.text = "Test"
Run Code Online (Sandbox Code Playgroud)

uitextfield reactive-cocoa swift reactive-cocoa-5 reactive-swift

9
推荐指数
1
解决办法
2954
查看次数

Reactive Cocoa - 将某些信号值转换为错误或已完成

也许我仍然在反应性学习曲线上挣扎,但我很难弄清楚如何将非反应类与其他反应代码联系起来.我正在使用一个类别来扩展非反应类.

该属性只是一个Enum,表示网络操作的当前状态,如New,Submitted,Processing和Completed.现在我在我的类别中写了以下方法:

@implementation JRequestBase (RACExtensions)
- (RACSignal*) rac_RequestStateSignal
{
    return  RACAble(self, state);
}
@end
Run Code Online (Sandbox Code Playgroud)

但是,当状态从Processing - > Completed或从任何状态转换为Errored时,我希望此信号发送Completed或Error而不是Next Value.我怎样才能在一个类别中实现这一目标?我想做的事情如下:

@implementation JRequestBase (RACExtensions)
- (RACSignal*) rac_RequestStateSignal
{
    return  [RACAble(self, state) map:^(NSNumber *state){
                 if ([state intValue] == iRequestStateComplete)
                 {    
                     # SEND COMPLETE
                 }
                 else if ([state intValue] == iRequestStateErrored)
                 { 
                     # SEND ERROR
                 }
                 else
                 { 
                     return state;
                 }
            }];
}
@end
Run Code Online (Sandbox Code Playgroud)

编辑:我看了一下GHAPIDemo并提出了以下建议:

- (RACSignal*) rac_RequestSignal
{
    RACSubject *subject = [[RACReplaySubject alloc] init];
    [[RACAble(self, state) subscribeNext:^(NSNumber* s){
        if ( [s intValue] == …
Run Code Online (Sandbox Code Playgroud)

objective-c reactive-cocoa

8
推荐指数
1
解决办法
3023
查看次数

将ReactiveCocoa中的信号组合到一个新的信号中,当所有信号都发生变化时触发

我正在尝试学习ReactiveCocoa,我正在编写一个简单的Space Invaders克隆,基于Ray Wenderlich教程.最近在开发过程中,我遇到了一个我无法解决的问题.基本上我有两个信号:

  • 轻拍手势信号
  • 每秒触发的定时序列

我想要实现的是将这些信号组合成一个新的信号,当两个信号都发生变化时会触发:是否可能?我看到了combineLatest方法,但只要有任何信号发生变化,就会执行该块.

我想要的伪代码是:

RACSignal *updateEventSignal = [RACSignal interval:1 onScheduler:[RACScheduler mainThreadScheduler]];
RACSignal *gestureSignal = [[UITapGestureRecognizer new] rac_gestureSignal];
[[RACSignal combineBoth:@[gestureSignal, updateEventSignal]
                   reduce:^id(id tap, id counter){
                       return tap;
                   }]
 subscribeNext:^(id x) {
     NSLog(@"Tapped [%@]", x);
 }];
Run Code Online (Sandbox Code Playgroud)

可能我可以通过其他方式获得相同的结果,或者这不是预期的行为或ReactiveCocoa,但在这一点上我想知道我是否处于正确的反应轨道.

objective-c ios reactive-cocoa

8
推荐指数
2
解决办法
5839
查看次数

如何使用ReactiveCocoa 3实现基本的UITextField输入+ UIButton操作场景?

我同时是一个Swift和ReactiveCocoa noob.使用MVVM和Reactive Cocoa v3.0-beta.4框架,我想实现此设置,以了解新RAC 3框架的基础知识.

我有一个文本字段,我希望文本输入包含超过3个字母,以进行验证.如果文本通过验证,则应启用下面的按钮.当按钮收到触地事件时,我想使用视图模型的属性触发操作.

由于目前关于RAC 3.0 beta的资源很少,我通过阅读框架的Github repo上的QA来实现以下内容.到目前为止,这是我能想到的:

ViewModel.swift

class ViewModel {

    var text = MutableProperty<String>("")
    let action: Action<String, Bool, NoError>
    let validatedTextProducer: SignalProducer<AnyObject?, NoError>

    init() {
        let validation: Signal<String, NoError> -> Signal<AnyObject?, NoError> = map ({
            string in
            return (count(string) > 3) as AnyObject?
        })

        validatedTextProducer = text.producer.lift(validation)

        //Dummy action for now. Will make a network request using the text property in the real app. 
        action = Action { _ in
            return SignalProducer { sink, disposable in …
Run Code Online (Sandbox Code Playgroud)

mvvm ios reactive-cocoa swift reactive-cocoa-3

8
推荐指数
1
解决办法
3823
查看次数

如何在ReactiveCocoa 5中将RACSignal转换为SignalProducer?

在ReactiveCocoa 4中,我们可以将a RACSignal转换为SignalProducer使用toSignalProducer().ReactiveCocoa 5中不存在此方法,那么我们如何才能做同样的事情呢?

objective-c reactive-cocoa swift reactive-cocoa-4 reactive-cocoa-5

8
推荐指数
1
解决办法
472
查看次数

如何在 RxSwift 中为行编写高度?

我想将以下代码转换为RxSwift. 还请帮助我如何ActionRxSwift.

ReactiveCocoa或者RxSwift哪个更适合在 swift3 中使用?

func tableView(_ tableView: UITableView, numberOfRowsInSection section: 
Int) -> Int {
    return posts.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: 
IndexPath) -> UITableViewCell {
    let cell: BTSTableViewCell = self.tableView.dequeueReusableCell(withIdentifier: "BTSTableViewCellIdentifier")! as! BTSTableViewCell

    cell.configureWithPost(posts[indexPath.row])
    cell.delegate = self
    return cell

}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    // 259.5+ labelHeight+ bigImageHeight

    let postViewModel = posts[indexPath.row]

    //caption height
    var captionHeight = postViewModel.textDetail?.height(withConstrainedWidth: tableView.bounds.size.width - 20, font: …
Run Code Online (Sandbox Code Playgroud)

ios reactive-cocoa rx-swift swift3

8
推荐指数
3
解决办法
8398
查看次数