苹果开发者大会 WWDC 2019 在北京时间今天凌晨开幕。在这场大会上除了「史上最难看 Mac 主机」、首次出现的iPadOS之外,咱们还终于能够对饱受诟病的iTunes说再见了。而对于开发者来讲,新发布的 SwiftUI 多是最吸引人的特性,在 苹果公司软件工程高级副总裁Craig Federighi的演示中,咱们能够轻松地把一百行的前端代码缩减到十几行。
下面来一张牛逼哄哄的SwiftUI效果图,给你们打打牙祭前端
SwiftUI 使用声明式语法,因此咱们能够简单地声明用户界面的样式。面试
这种声明式的方式甚至容许使用复杂的功能,如动画(animation)。只须要几行代码,便可添加动画在任何控件上,而且可使用易于调用的特效。在运行时,SwifthUI 会自行控制建立流畅动做的全部步骤,而且能够解决程序冲突,保证 app 稳定运行。动画特效变得如此容易,咱们能够发掘使 app 更加灵动的方式。编程
做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个个人iOS交流群:763164022,无论你是小白仍是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 你们一块儿交流学习成长!
下面是来自王巍对UIKit的诟病app
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 使用了声明式语法,因此开发者可以十分轻易地描述用户界面应该作什么。例如,编写须要包含文本字段的项目列表时,开发者能够用代码描述每一个字段的对齐方式、字体和颜色。代码也比之前更简单,更易于阅读。ide
这种声明式风格很是适用于像动画这样复杂的元素。经过 SwiftUI,开发者可轻松地将动画添加到几乎任何控件。工具
Xcode 11 包含更直观的新设计工具,可以让开发者经过拖拽的方式使用 SwiftUI 构建界面,在这过程当中能够直接设置控件的相关属性。 当在设计工具中工做时,所编辑的内容会马上反映到代码上,若是从模拟器切换到手机,手机也能立马看到预览效果。布局
SwiftUI 是真正的原生 UI 框架,创建在苹果数十年打磨用户界面的经验上。开发者经过少许代码和交互式设计就能使用这个框架。学习
为视图的任何状态声明内容和布局。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