征服ReactiveSwift:属性(第5部分)
欢迎来到征服ReactiveSwift系列文章的第5部分。 在上一篇文章中,我们学习了如何创建,启动和观察SignalProducer 。 在本文中,我们将讨论Property和MutableProperty的概念。
定义
属性
Property
是一个可观察的容器,只要更改其值,它就会发出其值。 它符合PropertyProtocol
, PropertyProtocol
本身具有以下属性:
- value :代表当前值
- producer :一个SignalProducer,它发送当前值以及随后的更改。 当属性取消初始化或没有进一步更改时,此操作完成。
- signal :一个信号,它发送随后的更改, 而不是当前值。 当属性取消初始化或没有进一步更改时,此操作完成。
有什么用?
当我们只需要处理值而不是错误时,这是非常有用的。
让我们考虑上一篇文章中的示例。
每隔五秒打印一次时间信息,间隔五十秒。
为此,我们创建了一个SignalProducer,如下所示:
请注意,这里的错误类型为NoError
,这意味着我们不在这里处理错误。 当我们可以将其包装在Property中时,这是一个很好的用例。
因此,让我们定义一个Property 。
在这里,属性的初始值为’0’,随后的值由signalProducer返回。
如前所述,Property具有signal
和producer
属性,两者都可以观察到,但主要区别在于信号不会发出当前值,只有随后对该值进行更改。
在此示例中,我们创建了一个属性,该属性从SignalProducer中获取值。 我们还可以创建一个属性,该属性也可以从Signal中获取值。
可变属性
MutableProperty是一个可观察的容器,它像Property一样在更改时发出值,但是也可以直接对其进行突变。 与Property类似,它也符合PropertyProtocol
。
MutableProperty可以使用如下初始值进行初始化:
然后,我们可以如下更新其当前值:
就像Property一样,可以观察MutableProperty的signal
和producer
。
当执行Bindings时, MutableProperty很有用。 然后MutableProperty允许我们编写如下代码:
在这里,这意味着mutableProperty
的value
由mutableProperty
决定。 我们将在后续文章中讨论有关绑定的更多信息。
结论
希望本文能使您对Property和MutableProperty有所了解。 您可以在此处找到示例代码。 在下一篇文章中,我们将介绍Action ,它使您可以更好地控制和执行Signal的行为。