ios – 使用活性可可来观察UITouches?

我对反应性可可相当新,我试图在我试图构建的游戏中包含FRP的元素.从我的在线搜索中,Reactive
cocoa的资源和文档似乎非常有限,大多数教程都使用相同的示例!

我想要做的是,有一个RACSignal,为视图上的当前触摸提供一个值流(为简单起见,假设没有多点触摸).然后使用subscribeNext在UITouch对象发生变异时执行我的操作.我自己设置RAC信号时遇到了麻烦!

目前我正在做以下(我不确定是正确的方法!)

  @interface MyView:UIView{

      UITouch *currentTouch;
      RACSignal *touchSignal;
  }
  @property(nonatomic , assign)UITouch *currentTouch;



  @implementation MyView
  @synthesize currentTouch;

  -(id)init{
     if(self = [super init]){

    }
    return self;
  }

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

   NSArray *touchArray = [touches allObjects]; 
   for(UITouch *touch in toucheArray){   
       currentTouch = touch;  
       if(!touchSignal){
           touchSignal = [RACObserve(self , currentTouch) distinctUntilChanged];
       }

    }

}

但每当我RACSignal尝试初始化游戏崩溃时,我得到以下内容:

 [MyView rac_valuesForKeyPath:observer:]: unrecognized selector sent to instance 0x2084cf90

我究竟做错了什么?设置RACSignal的正确方法是什么?另外,我如何在不同的对象(可能是MyView模型)中使用touchSignal并使用subscribe next来执行块中的操作?

最佳答案 我是这样做的,使用-rac_signalForSelector:.这更具说明性,更少命令性(这是我认为你的bug来自的地方).

RACSignal *touchSignal = [[[self
    rac_signalForSelector:@selector(touchesBegan:withEvent:)]
    reduceEach:^(NSSet *touches, UIEvent *event) {
        return [touches anyObject];
    }]
    distinctUntilChanged]
点赞