SwiftUI - 百行代码变十行,Swift再创辉煌
苹果开发者大会 WWDC 2019 在北京时间今天凌晨开幕。在这场大会上除了「史上最难看 Mac 主机」、首次出现的iPadOS以外,我们还终于可以对饱受诟病的iTunes说再见了。而对于开发者来说,新发布的 SwiftUI 可能是最吸引人的特性,在 苹果公司软件工程高级副总裁Craig Federighi的演示中,我们可以轻松地把一百行的前端代码缩减到十几行。
下面来一张牛逼哄哄的SwiftUI效果图,给大家打打牙祭
- 初体验:左边加大括号21行,右边出现一些类似SB的东西,布局UI,设置属性貌似都可以完成
SwiftUI 的特点是什么
SwiftUI 使用声明式语法,所以我们可以简单地声明用户界面的样式。
- 开发者可以声明需要由一串文本输入框构成的组件
- 然后定义每一个输入框的字体对齐方式、字体样式、字体颜色。
- 这些代码比以往更加易懂,省时并易于维护。
这种声明式的方式甚至允许使用复杂的功能,如动画(animation)。只需要几行代码,即可添加动画在任何控件上,并且可以使用易于调用的特效。在运行时,SwifthUI 会自行控制创建流畅动作的所有步骤,并且可以解决程序冲突,保证 app 稳定运行。动画特效变得如此容易,我们可以发掘使 app 更加灵动的方式。
为什么需要 SwiftUI
下面是来自王巍对UIKit的诟病
UIKit 提供的是一套符合直觉的,基于控制流的命令式的编程方式。最主要的思想是在确保 View或者 View Controller 生命周期以及用户交互时,相应的方法 (比如 viewDidLoad 或者某个 target-action 等) 能够被正确调用,从而构建用户界面和逻辑。不过,不管是从使用的便利性还是稳定性来说,UIKit 都面临着巨大的挑战。我个人勉强也能算是 iOS开发的“老司机”了,但是掉到 UIKit 的坑里这件事,也几乎还是我每天的日常。UIKit的基本思想要求 View Controller 承担绝大部分职责,它需要协调 model,view 以及用户交互。这带来和巨大的 side effect 以及大量的状态,如果没有妥善安置,它们将在 View Controller 中混杂在一起,同时作用于 view 或者逻辑,从而使状态管理愈发复杂,甚至不可维护。不仅是用户代码,UIKit本身内部也经常受困于可变状态,各种奇怪的 bug 也频频出现。
的确,我们平时开发很多的时间都浪费在了这个方面,然而作为牛逼的,我也相信必然会一统江湖的 Swift 也是不忍心让开发人员掉入这样的坑中,SwiftUI 只是一个开始---打开新世界的开始
声明式语法
SwiftUI 使用了声明式语法,所以开发者能够十分轻易地描述用户界面应该做什么。例如,编写需要包含文本字段的项目列表时,开发者可以用代码描述每个字段的对齐方式、字体和颜色。代码也比以前更简单,更易于阅读。
这种声明式风格非常适用于像动画这样复杂的元素。通过 SwiftUI,开发者可轻松地将动画添加到几乎任何控件。
拥有更直观的新设计工具
Xcode 11 包含更直观的新设计工具,可让开发者通过拖拽的方式使用 SwiftUI 构建界面,在这过程中可以直接设置控件的相关属性。 当在设计工具中工作时,所编辑的内容会立刻反映到代码上,如果从模拟器切换到手机,手机也能立马看到预览效果。
为所有的苹果设备提供原生体验
SwiftUI 是真正的原生 UI 框架,建立在苹果数十年打磨用户界面的经验上。开发者通过少量代码和交互式设计就能使用这个框架。
SwiftUI 示例代码
为视图的任何状态声明内容和布局。SwiftUI知道该状态何时发生变化,并更新视图的呈现以匹配该状态。
List(landmarks) { landmark in HStack { Image(landmark.thumbnail) Text(landmark.name) Spacer() if landmark.isFavorite { Image(systemName: "star.fill") .foregroundColor(.yellow) } } }
- 构建可复用的组件
将小的、单一职责的视图组合成更大、更复杂的接口。在为任何苹果平台设计的应用程序之间共享自定义视图。
struct FeatureCard: View { var landmark: Landmark var body: some View { landmark.featureImage .resizable() .aspectRatio(3/2, contentMode: .fit) .overlay(TextOverlay(landmark)) } }
- 简便的动画创建方式
创建平滑的动画就像添加一个方法调用一样简单。SwiftUI在需要时自动计算和动画转换。
VStack { Badge() .frame(width: 300, height: 300) .animation(.basic()) Text(name) .font(.title) .animation(Animation.basic().delay(0.25)) }
SwiftUI 支持的设备要求版本较高,将在7月份开启公测,官方介绍如下:
iOS 13.0+ Beta
macOS 10.15+ Beta
UIKit for Mac 13.0+ Beta
tvOS 13.0+ Beta
watchOS 6.0+ Bet
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
文件很容易被破解?python带你了解加密解密机制
本节使用python实现了一种简单的加密和解密机制。 描述:使用python实现一个简单的加密和解密机制,使用26个字母和一个单词作为密钥key 秘钥:大写英文字符串 明文:包含空格,大小写字母,数字等的字符串 实现过程 算法过程 主函数 执行主函数 以上就是小编所分享的内容,希望能够帮助到大家,
- 下一篇
隔壁女神泡不到?那是你没用到python仿抖音表白神器
很多人在问,python能干嘛? 可以做数据分析,比如可视化爬虫 可以做网站,比如知乎,youtube等等一些就是python写滴 可以做游戏,虽然我不知道有哪些大型游戏,但是还是能做 但是python可以做许多有趣的东西,比如下面的仿抖音表白神器 不妨来看看实现的过程 安装库 导入第三方库 设置标题 设置按钮 移动设置 填充窗口 获取坐标 编程文字 运行结果 以上就是小编所分享的表白案例,希望能够帮助到大家,祝大家早日脱单,啊哈哈
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Mario游戏-低调大师作品
- 2048小游戏-低调大师作品
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案