gpt4 book ai didi

ios - 适当的 ReactiveCocoa 链接

转载 作者:搜寻专家 更新时间:2023-10-31 19:31:14 25 4
gpt4 key购买 nike

我创建了两个信号:getConnectionconnection.rac_delete()connection.rac_delete() 取决于 getConnection 成功完成。

ReactiveCocoa 的做法是什么?我目前有这个解决方案,但感觉不是正确的方法。

getConnection().subscribeNext({
let connection = $0 as! Connection

connection.rac_delete().subscribeNext({ success in
println("DELETED!")
}, error: { error in
println("ERROR DELETING!")
})

}, error: { error in
println("ERROR GETTING!")
})

最佳答案

所以你有一个连接信号,你想把它的值变成其他东西(删除)。

通常您map 信号以获得新信号,但在这里您mapping 到另一个信号——map 会给您一个此时信号的信号。

但您并不是真的想要一个信号的信号,因为这样您就必须对结果进行这种烦人的嵌套订阅业务:

// (pseudocode)
getConnection()
.map(connection -> connection.rac_delete())
.subscribeNext(deletionSignal ->
deletionSignal.subscribeCompleted(->
println("done deleting")))

这并不比您当前的嵌套订阅更好——您只想将删除信号的信号扁平化为删除信号,然后直接订阅它。而这正是 flattenMap 所做的!

// (pseudocode)
getConnection()
.flattenMap(connection -> connection.rac_delete())
.subscribeCompleted(->
println("done deleting!"));

但请注意,这与上述代码的行为不同,但仅当 getConnection() 的信号发送多个值时才如此。以前,它会记录每个完成删除的连接;现在它只会在所有删除完成后最后记录一次。

因为我假设 getConnection() 返回的信号只发送一个值,所以它们在实践中可能表现相同,但值得一提。

我在这里使用 subscribeCompleted 而不是 subscribeNext 因为删除似乎不应该真正解析为 value;这只是需要时间的事情。但这很容易改变。

关于ios - 适当的 ReactiveCocoa 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29566262/

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