gpt4 book ai didi

ios - swift 1.2 上的 RACCommand 编译失败

转载 作者:行者123 更新时间:2023-12-02 11:02:57 26 4
gpt4 key购买 nike

我有一个登录按钮,其中分配了一个 RACCommand 来执行登录请求并返回一个用户对象。

我想处理按钮信号错误中的错误。

loginButton.rac_command.executionSignals.flatten()
.logAll()
.subscribeNext { (_:AnyObject!) -> Void in
println("Sent next")
}

所以我在 subscribeNext block 之前添加了 doError block ,但现在代码无法编译:
    loginButton.rac_command.executionSignals.flatten()
.logAll()
.doError { (err:NSError) -> Void in
println(err.description)
}
.subscribeNext { (_:AnyObject!) -> Void in
println("Sent next")
}

现在它返回错误:
cannot invoke 'subscribeNext' with an argument list of type '(AnyObject! -> Void)'

由于 doError 的签名是:
- (RACSignal *)doError:(void (^)(NSError *error))block;

我假设它给了我传递给 doError block 的相同信号,所以我可以订阅它。

不知道为什么这根本无法编译。
对此问题的任何见解都非常感谢。

最佳答案

错字在 doError() 的参数中(并且被编译器错误识别):它应该是 (NSError!) -> Void 类型而不是 (NSError) -> Void .像这样修改它编译得很好:

loginButton.rac_command.executionSignals.flatten()
.logAll()
.doError { (err:NSError!) -> Void in
println(err.description)
}
.subscribeNext { (_:AnyObject!) -> Void in
println("Sent next")
}

补充说明
  • 来自 RACCommand 的错误在内部捕获并发送到 errors()信号,所以没有发送到 executionSignals()信号。
  • doNext() , doError() , doComplete()方法将用于
    给信号注入(inject)副作用。所以你通常在使用它们时
    创建信号,而不是在处理其事件时。您可能想使用subscribeNext(nextBlock:error:completed:)方法(或其便利形式之一)代替。
  • 关于ios - swift 1.2 上的 RACCommand 编译失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29996021/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com