前言
本期是 Swift 编辑组自主整理周报的第八期,每个模块已初步成型。各位读者如果有好的提议,欢迎在文末留言。
欢迎投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的朋友一起加入周报整理。
风起雨坠袭大地,叶落冬来又一年。Swift社区,和你同风雨,与你共未来!👊👊👊
周报精选
新闻和社区:苹果发布最新声明!将工人健康放在首位,iPhone 14 Pro 收获需等待更长时间。
提案:Swift 论坛讨论人气最高的提案
Swift 论坛:比较两个 “any Error” 的相等性
推荐博文:iOS 16 统计图实战汇总
话题讨论: 大家觉得互联网行业会不会持续走下坡路?
新闻和社区
11 月 14 日,参与新一周的 Ask Apple 活动
欢迎继续参与新一周激动人心的 Ask Apple 开发者系列活动,与 Apple 专家直接交流沟通。针对如何将最新技术集成到您的 App 中、设计直观的 UI,以及测试最新软件等主题大胆提问。
活动将于 11 月 14 日至 18 日举行,届时将提供多种语言和多个时区的在线一对一咨询和小组 Q&A。现已面向 Apple Developer Program 和 Apple Developer Enterprise Program 的当前成员开放注册。
Ask Apple 开发者系列活动终场周将在 12 月推出,敬请关注详情。
苹果发布最新声明!将工人健康放在首位,iPhone 14 Pro 收获需等待更长时间。
11 月 7 日,苹果对 iPhone 14 Pro 和 iPhone 14 Pro Max 目前的供应情况做出最新声明。苹果称,富士康郑州工厂目前的产能大幅度降低,iPhone 14 Pro 和 iPhone 14 Pro Max 的出货量将低于预期。
苹果表示,“我们继续看到对 iPhone 14 Pro 和 iPhone 14 Pro Max 机型的强劲需求。然而,我们现在预计 iPhone 14 Pro 和 iPhone 14 Pro Max 的出货量将低于我们之前的预期,顾客将需要等待更长的时间才能收到新产品。”
苹果称,正在与供应商密切合作,以恢复正常的生产水平,同时确保每个工人的健康和安全。
macOS Ventura 更高效,更尽兴,更跨界。
macOS Ventura 让各种日常操作都进化成神操作。一波新技能助你搞定更多,一众常用 app 能分享和协作,晋级的游戏让你更投入,还有种种妙招能拉上其他设备一起显身手。
优化的搜索功能,搜索功能可提供更准确、更完整的搜寻结果,还能在你键入前就提供搜索建议。
聚焦的快速操作,现在,你可使用聚焦搜索快速执行操作,比如设置闹钟、开启专注模式、用 Shazam 查找歌名、运行快捷指令等。
共享标签页组,从 Safari 浏览器直接分享标签页和书签,或发送信息。无论是与好友规划行程,还是与家人选购沙发,你都可以在一处地方集中分享所有标签页。而你的伙伴也可把他们的标签页添加进来。
收发信息的新技能,现在,你可对刚发出的信息进行编辑,或是将其撤回。另外,对于无法及时回复,想回头再来处理的信息,可标为未读。
iCloud 共享照片图库,可与最多五人顺畅地分享照片和视频,鼓励大家一起制作家庭照片集,让回忆更丰富完整。iCloud 共享照片图库会把家人们的美好回忆都集于一处,让每个家庭成员随时都能欣赏,即使不是自己拍摄或编辑的照片也能看到。
多种智能的共享方式,共享照片图库可以根据开始日期或照片中的人物,选取想要囊括的内容来进行设置。完成后,你可以手动分享,也可以看看边栏里新的“为共享图库推荐”,根据它的智能建议将照片添加进来。
在 App 之间切换,轻点一下,可在各 app 和窗口之间流畅切换;点按桌面任意位置,则能快速返回某个文件或文件夹。
FaceTime 通话也能玩接力了,轻轻一点,就能在设备之间转移 FaceTime 通话,方便你随时换上合适的设备。
让 iPhone 兼职网络摄像头,iPhone 强大的摄像头系统配合 Mac,能实现以往普通网络摄像头做不到的效果。只要将 iPhone 靠近 Mac,输入源就会自动切换为 iPhone,而且过程是无线的,不用动手插拔。
更多 macOS Ventura 新功能请查阅 https://www.apple.com.cn/macos/ventura/
提案
提案模块本期没有新的状态更新。下面推荐几个在 Swift 论坛讨论人气最高的往期提案。感兴趣的小伙伴可以去参与讨论。
提案 SE-0374: 将 sleep(for:) 添加到 Clock。该提案已在十五期周报正在审查的提案模块做了详细介绍。
提案 SE-0376: 函数反向部署。该提案已在十六期周报正在审查的提案模块做了详细介绍。
提案 SE-0377: 提出了新的 borrow 和 take 参数修饰符。该提案已在十六期周报正在审查的提案模块做了详细介绍。
提案 SE-0366: 代码上下文新增敏感关键字 move 修订后。该提案已在十一期周报正在审查的提案模块做了详细介绍。
Swift论坛
let foo: String = ....
let bar = foo
foo == bar // is this O(1) ?
Discourse Hub App可以用来浏览Swift论坛内容,App基于WebView,本质与用浏览器没有区别😂
问题描述:有一个错误类型,它包含另一个存在的any Error:
@frozen public
struct RecursiveError<Location>:Error
{
/// The location (key or index) where the error occurred.
public
let location:Location
/// The underlying error that occurred.
public
let error:any Error
@inlinable public
init(_ error:any Error, in location:Location)
{
self.location = location
self.error = error
}
}
Unit Test:
$0.test(name: "int32-to-uint8", decoding: bson,
failure: RecursiveError<String>.init(
IntegerOverflowError<UInt8>.int32(.max),
in: "int32"))
{
try $0["int32"].decode(to: UInt8.self)
}
解决方法:
extension Error where Self:Equatable
{
fileprivate
func equals(_ other:any Error) -> Bool
{
(other as? Self).map { $0 == self } ?? false
}
}
执行:
async let first: Int[] = someAsyncCall()
async let second: Int[] = anotherAsyncCall()
let bothEmpty = (await first).isEmpty && (await second).isEmpty
// or
let bothEmpty = await (first.isEmpty && second.isEmpty)
// or any other variation I can think of
会有以下 Error:
'async let' in an autoclosure that does not support concurrency
Capturing 'async let' variables is not supported
Boolean 运算是使用标记为自动闭包的 rhs 参数定义的,这意味着右侧的表达式会自动捆绑到闭包中,从而延迟其执行直到需要。 值得注意的是,这个 rhs 闭包属性没有被标记为 async ,所以没有 await 语句可以出现在它的“内部”。
解决:
let bothEmpty = await [first, second].allSatisfy(\.isEmpty)
推荐博文
摘要: 在 iOS 16 中引入的 SwiftUI 图表,可以以直观的视觉格式呈现数据,并且可以使用 SwiftUI 图表快速创建。本文演示了几种定制折线图并与区域图结合来展示数据的方法。
在 Swift 图表中使用 Foudation 库中的测量类型
摘要: 本篇文章使用今年推出的新的 Swift Charts 框架,实现如何绘制默认不符合 Plottable 协议的类型的数据。
在 iOS 16 中用 SwiftUI Charts 创建一个折线图
摘要: 苹果在 WWWDC 2022 上推出了 SwiftUI 图表,本文展示了如何用比以前从头开始创建同样的折线图少得多的代码轻松创建折线图。
如何在 SwiftUI 中创建条形图
摘要: 本文将展示如何创建一个垂直条形图,其中矩形的高度将代表每个类别的值。
摘要: 文章仓库增加 Flutter 实战模块,整理相关主题文章。
话题讨论
都说互联网红利已经没有了,那么大家觉得互联网行业会不会持续走下坡路?
欢迎在文末留言参与讨论。
关于我们
Swift社区是由 Swift 爱好者共同维护的公益组织,我们会分享以 Swift实战、SwiftUl、Swift基础为核心的技术内容,也整理收集优秀的学习资料。
特别感谢 Swift社区 编辑部的每一位编辑,感谢大家的辛苦付出,为 Swift社区 提供优质内容,为 Swift 语言的发展贡献自己的力量。