UI 中提供了很多“新颖”的 设计思路和 Swift 的使用方式,我们可以进行借鉴,并反过来使用到普通的 Swift 代码中。PreferenceKey
的处理方式就是其中之一:它通过 protocol 的方式,为子 view 们提供了一套模式,让它们能将自定义值以类型安全的方式,向上传到父 view 去。如果有机会,我会再专门介绍 PreferenceKey
,但这种设计的模式其实和 UI 无关,在一般的 Swift 里,我们也能使用这种方法来改善 API 设计。
在这篇文章里,我们就来看看要如何做。可以在这里找到。你可以将这些代码复制到 Playground 中执行并查看结果。
红绿灯
用一个交通信号灯作为例子。
作为 Model 类型的 TrafficLight
类型定义了 .stop
、.proceed
和 .caution
三种 State
,它们分别代表停止、通行和注意三种状态 (当然,通俗来说就是“红绿黄”,但是 Model 不应该和颜色,也就是 View 层级相关)。它还持有一个 state
来表示当前的状态,并在设置时将这个状态通过 onStateChanged
发送出去:
发表评论