学而不思则罔,思而不学则殆。🤔
一直想写一篇一文搞懂 SwiftUI 数据流,结果忙着做项目搁置了很久,不知不觉 WWDC21 都已经来了。趁着学习新知识的时段,一并捡起这个没有做完的任务。这篇推文既作为预告,也是给自己催稿 🤣。
Apple WWDC21 第一天、第二天、第三天的 Session 视频官方都已经陆续放出。在写这篇文章时,我已经看第一天、第二天 SwiftUI 相关的几个 session。这里罗列一下要点,之后再抽空深入学习。读者们如果有对哪个主题感兴趣的,欢迎一起交流学习,可以给公众号后台留言。
对 SwiftUI 的工作机制感兴趣的读者推荐观看第三天的 “Demystify SwiftUI” session。
TimelineView
这是一个新的 View,在 “Whats new in watchOS 8” 和 “Whats new in SwiftUI” 两个 session 都有提到。简单来说,这是一个内建了时间线的视图,你可以用它来计划一些基于时间驱动的事务。计划时间的粒度可以是每帧,每分钟,每周期或者显式指定的时间点,分别对应了AnimationTimelineSchedule
,EveryMinuteTimelineSchedule
,PeriodicTimelineSchedule
,ExplicitTimelineSchedule
。
提示:Beta 版本的开发者文档已经上线。根据我的体验,SwiftUI 的文档有改善,一些新的 API 不再是只有一句话的描述,还有 discussion 和用例。
一个很实用的新 API。实际上我之前开发沙漏记³app 时就涉及了一些于基于时间驱动的逻辑,SwiftUI 2.0 以前这些都要靠 Timer 来实现,现在可以换成TimelineView
来做了。
PS:这个第一个版本只用了 72 小时完成开发和上线的 App 现在已经拥有了 1000+ 的用户 🍺🤣,抽空我也会分享一下自己的心得体会。
Region based notification
基于区域的通知(准确的说是基于 geofence),在 “Whats new in watchOS 8” session 里有介绍。我还没尝试,不确定在国内好不好用。
Location Button
Region based notification 特性可以利用相关的 API 来标记地点。
Canvas
除了一开始就有的Shape
,SwiftUI 又引入了比较接近 UIKit, AppKit 里的绘制方式。个人认为这应该算这个版本相对重量级的一组 API 了 👊(当然,如果只能挑一个 Big thing,我认为应当属 Swift 5.5)。因为有了这组 API,SwiftUI 的地盘可以往 graphics rich 的应用进一步延伸。”Whats new in watchOS 8″ , “Whats new in SwiftUI”,”Add rich graphics to your app” 三个 session 都有提到它。
注意:Canvas block 中的代码书写方式是命令式的。有 UIKit、AppKit 图形编程经验的读者应该会很熟悉。
更好的List
异步 Image:
AsyncImage
refreshable
modifiertask
modifier
从名字上应该能猜到它们的作用。不过上面说的几个新 API 并不特定于List
,只是 “Whats new in SwiftUI” 第一部分里先提到了。它们都基于 Swift 并发。
Swift 并发相关的一些语言特性,比如 async, await 关键字,都是由 Swift 5.5 引入的。Swift 5.5 引入了不少新特性,个人认为可以算一个大版本了,尤其是并发相关的细分特性很多。感兴趣的读者可以下载 Xcode 13 beta 提前体验。
listRowSeperator
,listRowSeperatorTintColor
,listStyle
:这几个 modifier 让 List 的外观定制自由度更大了。swipeActions
:终于支持自定义的 swipe 动作了 🍻。
List
之外的更多选择
Table
、TableColumn
表格也成为框架内建的一种视图类型啦。
@SetionedFetchReqeust
拉取的 CoreData 数据直接按属性分段,配合List
或者Form
分段组织数据。
“Whats new in SwiftUI” session 简单提了一下,”Bring Core Data concurrency to Swift and SwiftUI” 中也有涉及。
searchable
modifier
可以不用再自行包装 UISearchBar 了来实现搜索功能啦。
“Whats new in SwiftUI” session 中提到,”Craft search experience in SwiftUI” session 详细说明了用法,具体涉及@Environment((\.isSearching)
,Suggestion
block,onSumbit
modifier。
App 之间、多设备之间间共享数据
实现方式算很简洁了,涉及onDrag
,preview
,importsItemProviders
,exportsItemProviders
。有需要了解数据共享的读者可以重点关注一下。
SF Symbol 的变化
新的渲染模式:
hierarchy
,palette
新的内置颜色:针对主题和平台优化
使用方式简化:可以基于上下文自动选择合适的 SF Symbol 变体(比如人机交互规范建议 TabView 里使用 SF Symbol 的 fill 变体。现在你只需要写基本的 Symbol Name,SwiftUI 会自动帮你选择 fill 版本的变体。
相关的 session: “Whats new in SF Symbols”, “SF Symbols in SwiftUI”
全局样式的改进
新增了
foregroundStyle
modifierbackground
现在可以应用Material
,基本上对应 UIKit 的几种不同程度的毛玻璃效果。想要任意位置的毛玻璃背景终于可以不用再引入一个额外的 UIView 了。
按照官方说法,浅色/深色外观,SF Symbol,内置颜色集合,foregroundStyle, Material 这些都是完美配合的。也就说,它们相互之间都根据对方的选项调配了相应的选项。
文本和键盘的改进
Text
支持 Markdown 了👏。
你可以实现自定义的 attribute, 相关知识点:MarkdownDecodableAttributedStringKey
相关 session: “Whats new in Foundation”
dynmaicTypeSize
:可以用来约束动态字体的尺寸范围textSelection
:这个 modifier 可以用来允许用户选中文本,iOS 和 watchOS 也可以用哦。Rich information 的 App 应该用得上。
Text
,TextField
现在支持了更多内建的格式化操作
很遗憾,没提到
TextEditor
。估计文本控件的能力跟 UIKit 还有一些差距。想要开发 Text rich 的应用,估计还得回到 UIKit。
新增的 keyboard API
onSubmit
,submitLabel
这两个还没细看,键盘收起的问题能不能先解决了?
键盘的 accessory view 里现在也能放置工具按钮了,通过指定
ToolbarItem
的placement
为ToolbarItemPlacement.keyboard
来实现
@FocusState
切换焦点
相关 session: Direct and reflect focus in SwiftUI
这个新 API 在表单交互和 tvOS 上应该会用到。
按钮的 API 改进
新的
buttonStyle
controlSize
:控制按钮的尺寸controlProminence
:控制按钮的凸显模式keyboardShortcut
:按钮对应的默认快捷键按钮的
role
属性按钮的动作确认:
confirmationDialog
Menu
,menuStyle(.button)
,menuIndicator(.hidden)
,primaryAction
总的来说,按钮在样式方面提供了更多的设定接口,但参数几乎都是枚举,十分简便。我想这也是为了让按钮在各种场景下更符合 Apple 的人机交互规范。
一些其他 API
privacySensitive
modifier,可以让隐式敏感的内容在 Widget、表盘上动态地切换有效视图和占位视图。各种辅助功能的改进(相关 session: “SwiftUI Accessibility”)
Preview 专门给 Accessibility 新增了一组属性编辑界面。Apple 对于辅助功能的重视,我个人是很赞赏的。
safeAreaInset
我想 Apple 一定是注意到了这个细节:不少 App 应该都有这样一种交互场景。一个可滚动视图+底部菜单,要求滚动视图在向下滚动时能够延伸到底部菜单之下,底部菜单一般是采用毛玻璃效果。而这在有
safeAreaInset
之前,你得用一段跟底部菜单等高的占位视图把滚动视图顶开才能实现。
总结:今年是 SwiftUI 发布的第三个年头,虽然很多 API 的功能跟 UIKit / AppKit 这些发展了十多年的框架还有差距,但从 Canvas API 就可以看出,SwiftUI 未来的目标应该是全面取代原有的框架。
封面来自https://developer.apple.com/news/?id=wsatejun
声明:本文部分素材转载自互联网,如有侵权立即删除 。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容