SwiftUI

WWDC(WorldwideDevelopersConference)大会上,苹果宣布了基于Swift语言构建的全新UI框架增量包-SwiftUI。SwiftUI界面布局抛弃了Storyboard和Autolayout方案,采用声明式界面语言(域指定语言)(DSL(DomainSpecificLanguage)),加上游乐场的Canvas画布实时预览功能。UIKit提供符合直觉的命令式编程方式,但由于UIKit的基本思想要求 ViewController承担绝大部分职责,UIKit思想下VC需要协调model,view及用户交互,代码臃肿无法维护。开始使用声明式或函数式的方式来进行界面开发。SwiftUI、React、Flutter采取了声明式编程。
声明式编程:是一种不使用控制流表示计算逻辑的编程范式。
命令式编程:是一种通过控制流命令语句来改变程序状态的编程范式。
设置渲染一个Text:
1)命令式编程
override func viewDidLoad() {
super.viewDidLoad()
let label = UILabel(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
label.text = “世界和平”
label.textColor = .purple
view.addSubview(label)
}

2)基于SwiftUI框架增量包可以采用声明式编程风格
var body: some View {
Text(“世界和平”)
.color(.purple)
}

UIKit命令式编程通过逐句的指令代码来指导“怎么构建UI”;声明式编程使用各自的DSL来描述“UI是什么效果”(只描述效果而至于具体的操作过程方式不管)


SwiftUI是怎么进行布局?
在SwiftUI里,上面Text内容文本的声明只是纯数据结构描述,并非实际待显示出来的渲染视图规则,SwiftUI会读取DSL内部的描述信息收集起来,然后根据DSL内部的描述信息把纯数据结构内容转换成基本图形单元组规则集,最终交给底层Metal或OpenGL包渲染出来。
在SwiftUI增量包中Text内容属性的设置在内部都会用一个虚拟的View虚拟视图承载,后在实际开始布局时再进行布局计算,方便底层设计渲染函数时更容易monomorphic call单一式调用函数,提高效率。
SwiftUI内嵌控件规则层次结构模型(虚拟层次模型)


SwiftUI内嵌控件规则虚拟层次结构模型
在这里插入图片描述
备注:要使用SwiftUI全新UI框架增量包完整功能,需Xcode升级11后且macOS系统升级到10.15后。


APP启动
应用app在AppDelegate辅助类中通过application(_:configurationForConnecting:options)返回UISceneConfiguration场景布局实例:
场景布局iOS13中新加入概念,通过Scene场景会话来管理应用app生命周期,多窗口支持部分所需要代码。在应用app已完成启动后,控制权被交接给SceneDelegate场景代理辅助类。

发布了121 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/yanhaijunyan/article/details/103037490