Swift单向数据流

Redux

Redux是Javascript程序的状态容器,遵循3个原则让复杂的状态管理变得容易。

三大原则

单一数据源

整个应用的state被存储在一棵object tree中,并且这个object tree只存在唯一一个store中。

状态只读

store中 state 是只读的,如果想要变更状态,只能通过action来进行。
视图、网络等事件不能直接修改state,它们只能表达想修改的意图(例如:添加一行数据,数据内容是XXX)。所有的修改都被集中化处理,并且严格按照一个接一个的顺序执行。

使用纯函数来执行修改

为了描述action如何修改state,需要编写reducers。
Reducer只是一些纯函数,它接受先前的state和action,并返回新的state。

继续阅读Swift单向数据流

《Swift进阶》内建集合类型 字典

Swift 中另外一个关键的数据结构就是Dictionary,字典。字典包含键以及对应的值。在一个字典中,每个键都只能出现一次。通过键来取值所花费的平均时间是常量级的(数组中寻找特定的元素花的时间与它的数组的尺寸成正比)。和数组不同的是字典是无序的,遍历字典的键值对时,顺序是不确定的。

我们可以用下标来获取值(比如dict[“Name”]),字典查找将返回可选值,不存在的时候返回nil。这里和数组不同,使用越界下标访问程序将会崩溃。

字典是一种稀疏结构,即使在name键下有值,你也没办法确定address键下面是否有值。 继续阅读《Swift进阶》内建集合类型 字典

《Swift进阶》内建集合类型 数组

数组和可变性

在swift中,使用let定义的数组为不可变的数组,使用var定义的数组为可变数组。在不可变的数组中使用append这样的方法,会得到一个编译错误。

swift的Array数组是struct值类型,当复制到新变量的时候里面的值会被复制,也就是说改变其中一个变量,另外一个变量不会受到影响。

在Foundation框架中的NSArray和NSMutableArray是引用类型的class,因为引用类型的特性,使用let并不能保证这个数组不会被改变。

如果使用Foundation框架中的数组,为了安全,赋值最好使用copy方法进行。 继续阅读《Swift进阶》内建集合类型 数组