我有一个属性,如果a 处于状态或状态recording,则更改为.YESUILongPressGestureRecognizerUIGestureRecognizerStateBeganUIGestureRecognizerStateChanged
如何创建一个仅在recording返回时而NO不是在其初始值时触发的信号?
(我可能会以完全错误的方式使用它,所以请随意挑战这篇文章的前提.)
我有一个小的RACTest应用程序(听起来很熟悉吗?),我正在尝试进行单元测试.我想测试MPSTicker,它是最基于ReactiveCocoa的组件之一.如果累积标志设置为YES,它有一个每秒发送一次累积值的信号.我添加了一个初始化器来为其递增信号采用自定义信号,而不是仅基于定时器.
我想对MPSTicker的几个行为进行单元测试:
我添加了一个使用内置计时器来测试第一个增量的测试,并且它按照我的预期工作(尽管我正在寻求改进愚蠢的RACSequence初始化的建议,我做了以获得具有@(1)我想要的值的信号. )
我很难确定我可以向MPSTicker提供哪些输入信号,我可以手动发送值.我想象一个测试:
<set up ticker>
<send a tick value>
<verify accumulated value is 1>
<send another value>
<verify accumulated value is 2>
Run Code Online (Sandbox Code Playgroud)
我尝试使用一个,RACSubject所以我可以使用sendNext:我认为合适的价值,但它不像我期望的那样工作.这是两个破碎的测试:
- (void)testManualTimerTheFirst
{
// Create a custom tick with one value to send.
RACSubject *controlledSignal = [RACSubject subject];
MPSTicker *ticker = [[MPSTicker alloc] initWithTickSource:controlledSignal];
[ticker.accumulateSignal subscribeNext:^(id x) {
NSLog(@"%s value is %@", __func__, x);
}]; …Run Code Online (Sandbox Code Playgroud) 我可以使用返回值的RACSignal实现dataSource方法.我不喜欢这样的东西 -
[self rac_signalForSelector:@selector(tableView:numberOfRowsInSection:)]{
return @10;}];
处理信号时如何处理需要返回值的方法?
我正在使用ReactiveCocoa开发应用程序,现在是时候整合Reachability来处理网络事件了.
我不确定我所做的工作,因为一些RAC设计指南建议反对它.但是从我一直在研究的内容来看,我找不到合适的方法来管理这个(或者更可能的是,我不明白怎么做).
我们的想法是拥有一个独特的信号,在Reachability的通知上发送事件.我们的每个视图控制器都会订阅该信号,并以特定的方式对每个信号做出反应(即alertview,什么也不做,等等).
问题是我们只需要可见的viewcontroller来做出反应,所以我们使用的是RACDisposable.这样,当一个viewcontroller出现时,它会订阅信号,当它消失时,我们就会处理它.
根据RAC的设计指南,应避免使用RACDisposable,但我无法以任何其他方式处理此订阅/取消订阅周期.
这种方法对于这种"无限"信号是否正确?
我们的另一种选择是使用一个信号,当一个新的用户加入时,它会删除以前的用户.这样的事情存在吗?
提前感谢任何光线,你可以指出我的方向.
从这个 SO帖子我开始尝试takeUntil:[self rac_willDeallocSignal]这在理论上似乎有用,但对我来说并不适用.由于此行为封装在Manager中,并且不应该取消分配,我不知道这对我有利.
我想到的一个选项是,takeUntil只要调用一个停止方法,就会触发一个新信号; 但它似乎只是因为我们不使用RACDisposable.
network-programming objective-c reachability ios reactive-cocoa
就我而言,我提出了containerViewController几个UIViewControllers.
其中一个控制器A将每10秒向服务器发送一次请求以获取数据.我用a RACSignal来做:
[[[RACSignal interval:10 onScheduler:[RACScheduler mainThreadScheduler]] takeUntil:self.rac_willDeallocSignal] subscribeNext:DoSomeThing];
但是,当containerViewController从RootViewController的驳回,信号发射仍然每10秒,手段rac_willDeallocSignal的控制器A不叫.怎么修好?????
谢谢!!!
我已将ReactiveCocoa添加到我的Podfile并成功安装.但是,当我尝试构建我的项目时,我遇到了"为libPods -LlamaKit.a创建静态库"的问题.
看起来LLamaKit是用Swift编写的(而我的项目是ObjC) - 这有关系吗?
给出的错误是:
error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: unknown option character `X' in: -Xlinker
Run Code Online (Sandbox Code Playgroud) 我是ReactiveCocoa的新手,有一个问题我还没找到解决办法.我的应用程序中有一个网络请求,它返回要编码的数据,QR码只有30秒有效.网络请求返回a RACSignal并且我将要在该信号中编码的数据发送到我的视图模型.在视图模型中,我将该数据映射到QR图像,并将其作为视图模型界面中的属性公开.在我创建QR图像后,我想更新一个timeLeftString显示"此代码仅在30秒内有效"的属性,但秒数将随着时间的推移而变化,在完成30秒后,我想再次请求获取另一个有效30秒的QR码数据,之后完成另一个请求,获取数据将有效30秒......直到屏幕被解除.我该如何实现呢?
目前我有这个来获取数据:
- (RACSignal *)newPaymentSignal
{
@weakify(self);
return [[[[APIManager sharedManager] newPayment] map:^id(NSString *paymentToken) {
ZXMultiFormatWriter *writer = [ZXMultiFormatWriter writer];
ZXBitMatrix *result =
[writer encode:paymentToken format:kBarcodeFormatQRCode width:250 height:250 error:nil];
if (!result) {
return nil;
}
CGImageRef cgImage = [[ZXImage imageWithMatrix:result] cgimage];
UIImage *image = [UIImage imageWithCGImage:cgImage];
return UIImagePNGRepresentation(image);
}] doNext:^(NSData *data) {
@strongify(self);
self.qrImageData = data;
}];
}
Run Code Online (Sandbox Code Playgroud)
这对于计时器
- (RACSignal *)timeRemainingSignal
{
@weakify(self);
return [[[RACSignal interval:0.5 onScheduler:[RACScheduler scheduler]] //
startWith:[NSDate date]] //
initially:^{
@strongify(self);
self.expiryDate = …Run Code Online (Sandbox Code Playgroud) 看起来UITextView -rac_textsignal在以编程方式更改文本时不起作用,例如通过iOS更正.绑定就是这样的.
RAC(self, viewModel.text) = self.textView.rac_textSignal;
Run Code Online (Sandbox Code Playgroud)
有什么解决方案吗?
我正在使用ReactiveCocoa 4.0和Swift.我有一个叫做startedSignal类型的信号Signal<String, NoError>,我在视图控制器中订阅.
startedSignal.observeNext { _ in
// Do stuff
}
Run Code Online (Sandbox Code Playgroud)
我基本上想要等待几秒钟,如果startedSignal不发送任何下一个值,则执行其他操作.我查看了文档并查看了类似的内容retry,SignalProducer但我不确定如何实现这一点,因为startedSignal它没有完成或发送错误.
我几乎是 ReactiveCocoa/ReactiveSwift 的菜鸟。我有两个 SignalProducers。如果第一个 SignalProducer 返回 nil,那么我想执行第二个 SignalProducer,否则不执行。我阅读了文档,但我不确定哪种语法可以帮助我完成这样的工作。任何帮助都受到高度赞赏。
cocoa reactive-programming reactive-cocoa swift reactive-swift
我正在使用新的ReactiveCocoa + ReactiveSwift编写Swift.我正在尝试使用新的ReactiveCocoa框架执行以下操作(在ReactiveCocoa 2.5中):
[[RACObserve(user, username) skip:1] subscribeNext:^(NSString *newUserName) {
// perform actions...
}];
Run Code Online (Sandbox Code Playgroud)
经过一些研究,我仍然无法弄清楚如何做到这一点.请帮忙!非常感谢你!
我已经建立了 UIControl 的一个子类,我想观察切换事件。从 RAC3 天开始就有一些较旧的答案,我们现在已经到了 RAC5,所以我想我会问这个问题以获得更多最新信息。
reactive-cocoa ×12
ios ×6
swift ×5
objective-c ×4
cocoa ×1
cocoa-touch ×1
cocoapods ×1
reachability ×1
swift4 ×1
timer ×1
uitextview ×1
unit-testing ×1