如果说指令式是教会计算机 “怎么做”, 那么声明式就是告诉计算机要 “做什么”。指令式编程是描述过程,期望程序执行以 得到我们想要的结果;而声明式编程则是描述结果,让计算机为我们考虑和组织出 具体过程,最后得到被描述的结果。
现代语言中,一般使用函数式编程或者 DSL 的方式来实现声明式的编程方式。
一般来说,View = f(State) 中的函数 f 是纯函数,也就是对于某个特定的输入 State, 所对应的 View 是确定的,不随其他变量而改变。我们可以单纯地通过控制和改变 State 来得到确定的 UI,这是使用声明式的方法来构建 UI 的基础。
SwiftUI 和 Combine 都是在 WWDC 2019 上 Apple 公布的开发框架,它们都是由纯 Swift 编写的。前者是一个声明式 UI 的用户界面开发框架,后者是基于响应式编程, 用于处理数据流的框架。
按照这个定义,大致来说,view modifier 分为两种类别:
→ 像是 font,foregroundColor 这样定义在具体类型 (比如例中的 Text) 上,然后 返回同样类型 (Text) 的原地 modifier。
→ 像是 padding,background 这样定义在 View extension 中,将原来的 View 进行包装并返回新的 View 的封装类 modifier。
原地 modifier 一般来说对顺序不敏感,对布局也不关心,它们更像是针对对象 View 本身的属性的修改。而与之相反,封装类的 modifier 的顺序十分重要。
在 SwiftU