苹果 WWDC 2023 公布了新的 Swift / SwiftUI 特性
苹果公司在 WWDC23 全球开发者大会上公开了 Swift 编程语言及其生态系统(如SwiftUI )的新特性。
值得注意的是,两者本身同属统一生态下,新特性和改进并不相互独立。
Swift 编程语言
If / let 和 switch 语句作为表达式
可以使用内联 if 语句
struct Account { var balance: Double } let account = Account(balance: 500) let status = if account.balance < 0 { "debt" } else if account.balance == 0 { "break even" } else { "Profit" } print("Your account is in \(status).")
同样可以使用 switch 语句
enum WeatherCondition { case sunny case cloudy case rainy } let weather = WeatherCondition.sunny let advice = switch weather { case .sunny: "Feeling hot!" case .cloudy: "Oooooooh" case .rainy: "Don't forget your rain jacket" } print("Today's advice: \(advice)")
改进的错误检测
struct ContentView: View { enum Destination { case one, two } var body: some View { List { NavigationLink(value: .one) { //In 5.9, Errors provide a more accurate diagnostic Text("one") } NavigationLink(value: .two) { Text("two") } }.navigationDestination(for: Destination.self) { $0.view // Error occurs here in 5.7 } } }
值和类型参数包
Parameter Packs ,一种接受任意数量参数的函数的方法,使它们成为可变函数。此外,这些参数可以是不同的类型。参数包与泛型等概念相结合时,可以使代码更加灵活和可重用。
下面的示例来自苹果官方 swift 示例仓库:
struct Pair<First, Second> { let first: First let second: Second init(_ first: First, _ second: Second) { self.first = first self.second = second } } func makePairs<each First, each Second>( firsts first: repeat each First, seconds second: repeat each Second ) -> (repeat Pair<each First, each Second>) { (repeat Pair(each first, each second)) } let pairs = makePairs(firsts: 1, "hello", seconds: true, 1.0) print(pairs)
Macros 宏指令
宏就像类型或函数一样是 API,可以在编译时生成重复代码,比如自定义 Codable 等模块,也可以集成进入 Swift Package 中。
Swift Data
不用自定义数据库,告别了复杂数据流,只需要一个 @Model 关键词。
文章无法一一介绍改动,感兴趣的朋友可以在 WWDC23 回放中查看完整视频,了解所有关于 Swift 改动的内容。
SwiftUI 的新东西
Data flow
SwiftUI 不再使用 Combine,而是使用新的 Observation 框架。 Observation 框架提供了 Observable 协议,必须使用它来允许 SwiftUI 订阅更改和更新视图。
今年的更新把重点放在了 @State 和 @Environment 上,其它的都用 Macro 解决了。这点可以大幅度了减轻代码中对于 EnvironmentState 和 ObjectState 的使用。
Animations 动画
SwiftUI 框架有新版本的 withAnimation 函数,允许提供动画完成处理程序。这是一个很好的补充,可以构建阶段性动画。
此外引入了新的 PhaseAnimator 视图,该视图迭代阶段序列,允许为每个阶段提供不同的动画,并在阶段发生变化时更新内容。另外还有 KeyframeAnimator 视图,允许使用关键帧动画。
struct AnimationExample: View { @State private var value = false var body: some View { Text(verbatim: "Hello") .scaleEffect(value ? 2 : 1) .onTapGesture { withAnimation { value.toggle() } completion: { print("Animation have finished") } } } }
ScrollView 滚动视图
ScrollView 有一些更新,比如可以使用 scrollPosition 视图修饰符来观察内容偏移。
struct ContentView: View { @State private var scrollPosition: Int? = 0 var body: some View { ScrollView { Button("Scroll") { scrollPosition = 80 } ForEach(1..<100, id: \.self) { number in Text(verbatim: number.formatted()) } .scrollTargetLayout() } .scrollPosition(id: $scrollPosition) } }
其次还可以使用 scrollTargetBehavior 视图修饰符更改滚动行为,它允许在滚动视图中启用分页。
Search 搜索
与搜索相关的视图修改器也有一些补充,例如可以以编程方式关注搜索字段。
struct ProductsView: View { @State private var store = Store() @State private var query = "" @State private var scope: Scope = .default var body: some View { List(store.products, id: \.self) { product in Text(verbatim: product) } .task { if store.products.isEmpty { await store.fetch() } } .searchable(text: $query, isPresented: .constant(true), prompt: "Query") .searchScopes($scope, activation: .onTextEntry) { Text(verbatim: scope.rawValue) } } }
在上面的示例,可以使用可搜索视图修饰符的 isPresented 参数来显示/隐藏搜索字段,还可以使用 searchScopes 视图修饰符的激活参数来定义范围可见性的逻辑。
New gestures 新手势
新的 RotateGesture 和 MagnifyGesture 允许跟踪视图的旋转和放大。
struct RotateGestureView: View { @State private var angle = Angle(degrees: 0.0) var rotation: some Gesture { RotateGesture() .onChanged { value in angle = value.rotation } } var body: some View { Rectangle() .frame(width: 200, height: 200, alignment: .center) .rotationEffect(angle) .gesture(rotation) } }
WWDC 关于 SwiftUI 的演讲长达 34 分钟,文章无法一一介绍其改动,感兴趣的朋友可以在 WWDC23 官方回放中查看完整视频。
值得一提的是,watchOS 已全部用 SwiftUI 重写。可以看到诸如 NavigationSplitView 的应用,诸如半透明材质效果,右侧小边栏按钮,半透明 Tab 。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
上海 AI 实验室与商汤科技等发布“书生·浦语”大语言模型
上海人工智能实验室(上海AI实验室)、商汤科技联合香港中文大学、复旦大学及上海交通大学发布千亿级参数大语言模型“书生·浦语”(InternLM)。 根据介绍,“书生·浦语”具有1040亿参数,是在包含1.6万亿token的多语种高质量数据集上训练而成。全面评测结果显示,“书生·浦语”不仅在知识掌握、阅读理解、数学推理、多语翻译等多个测试任务上表现优秀,而且具备很强的综合能力,因而在综合性考试中表现突出,在多项中文考试中取得超越ChatGPT的成绩,其中就包括中国高考各科目的数据集(GaoKao)。 综合“大考”:“书生·浦语”多项成绩领先于ChatGPT “书生·浦语”联合团队选取了20余项评测对其进行检验,其中包含全球最具影响力的四个综合性考试评测集: 由伯克利加州大学等高校构建的多任务考试评测集MMLU; 由微软研究院推出的学科考试评测集AGIEval(含中国高考、司法考试及美国SAT、LSAT、GRE和GMAT等); 由上海交通大学、清华大学和爱丁堡大学合作构建的面向中文语言模型的综合性考试评测集C-Eval; 由复旦大学研究团队构建的高考题目评测集Gaokao。 实验室联合团队...
- 下一篇
WWDC 2023 亮点:visionOS 系统、 Swift / SwiftUI 新特性
6 月 5 日,苹果 WWDC23 全球开发者大会正式开幕。大会上,苹果展示了包括 iOS 17、iPadOS 17、watchOS 10 和 macOS Sonoma 在内的新系统。 硬件方面,苹果发布了 15 英寸的 MacBook Air、搭载 M2 Ultra 的 Mac Studio 以及 Mac Pro。此外,苹果还发布了其第一款 AR 眼镜 Apple Vision Pro。 本文对WWDC23 全球开发者大会的内容作汇总: 苹果发布 M2 Ultra SoC,24 核心,最高 192GB 内存 Apple 在 WWDC 2023 大会上揭开了最新芯片 M2 Ultra SoC的面纱。 Apple M2 Ultra 的数据非常夸张,提供 24 个 CPU 核心,最多 76 个核心 GPU,以及高达 192GB 的统一内存,内存带宽为 800GB/s。这款芯片拥有 1340 亿个晶体管,提供 32 核神经引擎。 苹果宣布最新操作系统:visionOS 苹果 AR 眼镜 Apple Vision Pro运行的正是苹果最新操作系统 ——visionOS,苹果称其为 “第一个为空...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作