携手创造,一同成长!这是我参加「日新方案 8 月更文应战」的第6天,点击查看活动概况

前语

前几期周报内容是同步翻译的英文版周报,现在英文版停更,周报阻滞半年多。通过多次评论,咱们决议重启周报,分模块收拾内容同步给大家。

周报内容模块分为:新闻提案Swift论坛引荐博文。初期方案每两周发布一期,欢迎志同道合的朋友一同加入周报收拾。

昨日的日子与作业是否也曾苍茫?对新技能巴望打破的心是否依旧执着?Swift社区,为你的技能栈添砖加瓦,你,准备好了吗?

新闻和社区

苹果先买后付服务被警告:破坏这一新式行业的竞赛

据英国《金融时报》7月27日报导,美国消费者金融保护局罗希特乔普拉向硅谷宣布警告。大型科技公司进入“先买后付”借款业务会破坏这一新式行业的竞赛,他还对客户数据的运用提出了质疑。此前6月6日苹果公司在年度开发者大会上推出“先买后付”的“Apple Pay Later”服务,答应用户6周内分4期付款,期间不发生利息等其他费用。(via 泰山财经)

与 App Store 专家会面沟通

准备好与专家在线沟通探讨,了解如何充分运用 App Store 的功用。探究如何招引新顾客、测试营销策略、增加订阅等等。在整个 8 月,苹果官方将在多个时区以多种言语进行实时演讲和答疑。假如您也是苹果开发者的话,最近必定收到了相关的邮件约请吧,不知道您是否参加了本次会面沟通呢?(Apple Developer Program)

即将从 XML Feed 过渡到 App Store Connect API

App Store Connect REST API 让您能够跨各种开发者东西自定义使命并完成使命自动化,使作业流程更灵敏、更高效。从 2022 年 11 月开端,您将需求运用此 API 来代替 XML Feed,从而完成对 App 内购买项目、订阅、元数据和 App 定价的自动化办理。XML Feed 将继续为现有的 Game Center 办理功用供给支持。(Apple Developer News)

新功用 RoomPlan

运用 RoomPlan 创立房间的 3D 户型图,包含家具的尺寸和类型等要害特征。这个是由 ARKit 供给支持的全新 Swift API 能够运用 iPhone 和 iPad 上的摄像头和激光雷达扫描仪将实际环境带入您的 App 中。

运用概况能够观看 WWDC22 中的 运用 RoomPlan 创立参数 3D 房间扫描

当即注册 WWDC22 实验室和聊天室

注册实验室和线上聊天室,即可在一整周内与 Apple 工程师、设计师和专家在线沟通。

已推出 Xcode 14 Beta 版

包含了适用于所有 Apple 渠道 SDK 的 Xcode 14 Beta 版现已推出。运用简洁且强壮的 Swift 和 SwiftUI 以及全新的跨渠道 App 体验,运用修改器的增强功用更快捷地编写代码,并着手开端进行从 Xcode CloudTestFlight 以及 App Store 的测试和部署。

下载 Xcode 14 Beta 版

提案

通过的提案

SE-0352: 隐式敞开的存在类型 状况:Swift 5.7 已完成 Swift 中的存在类型答应存储一个特定类型为不知道的值,且或许在运行时更改。被存储值的动态类型,咱们称为存在类型的底层类型,仅由它遵从的协议集以及潜在的超类知道。虽然存在类型关于表达动态类型的值十分有用,但因为它们的动态性质,它们遭到一定束缚。最近的提议使存在类型愈加明晰,以帮助开发人员了解这种动态性质,并通过消除一些束缚使存在类型更具表现力。但是存在类型中的基本类型仍然存在,一旦你有一个存在类型的值,你就很难对其运用泛型。开发者通常会遇到 protocol 'P' as a type cannot conform to itself 这样的报错问题。

SE-0352: 隐式敞开的存在类型 已于 2022 年 5 月 18 日完成,核心团队已决议承受该提案。第2次审查的重点是关注向前兼容性,当一个调用引发一个隐式敞开的存在类型,有必要被抹除类型以避免存在的动态类型内存走漏到回来值中。当存在类型的表达才能增加,咱们或许会有才能运用一个更具体的类型作为这一个调用的回来类型,这或许形成源中断。为了避免这种情况,该提案要求在调用中显式地作为任何 P 类型注释,其中当前能够表达的回来类型将丢掉对被类型擦除的原始关联类型的束缚,如提案中的示例所示:

protocol P {
  associatedtype A
}
protocol Q {
  associatedtype B: P where B.A == Int
}
func getP<T: P>(_ p: T)
func getBFromQ<T: Q>(_ q: T) -> T.B { ... }
func eraseQAssoc(q: any Q) {
  let x = getBFromQ(q)          // 错误,有必要指定 "as any P" 因为缺少 T.B.A == Int 的束缚
  let y = getBFromQ(q) as any P // 能够, 明晰扔掉束缚
}

SE-0353: 受束缚的存在类型 状况:Swift 5.7 已完成 存在类型弥补了 Swift 类型系统中的笼统才能。与泛型一样,它们使函数能够获取和回来多种或许的类型。与泛型参数类型不同,存在类型在作为输入传递给函数时不需求预先知道。此外,当从函数回来时,能够删去具体类型(隐藏在协议接口后面)。在这个范畴呈现了一系列活动,SE-0309 解除了对运用具有关联类型的协议作为存在类型的剩余束缚,而 SE-0346 为关联类型协议的轻量级束缚语法铺平了道路。该提案直接依据这些想法,旨在在存在类型的上下文中重用轻量级关联类型束缚的语法。

any Collection<String>

SE-0356: Swift 代码片段 该提案描述了编写成为片段的新形式示例代码的约定。片段是简短的单文件示例,能够在 Swift 包中构建和运行,能够拜访该包中的其他代码,而且能够以多种方法运用。

正在审查的提案

SE-0359: 构建时间常数值 状况:已承受 构建时间常数值是一个 Swift 言语特性,要求在编译时知道某些值。这是通过特点、@const、束缚特点和函数参数来完成的,以使其具有编译时可知的值。这些信息为未来更丰厚的编译时特性奠定了基础,例如在编译时提取和验证值。

SE-0362: 即将到来的言语改善的逐渐选用 状况:已承受 Swift 6 积累了许多对言语有源码兼容性影响的改善,从而在以前的言语形式(Swift 4.x 和 Swift 5.x)中默认情况下无法启用它们。这些改善现已在背后为 Swift 6 言语形式的 Swift 编译器中完成,但他们关于开发者是无法拜访的,并将持续直到 Swift 6 作为一个可获得的言语形式。这有很多原因,为什么咱们应该思考尽快供给这些改动。

  • 开发者期望很快从这些改善中获益,而不是等到 Swift 6 可用。
  • 向开发者供给这些改善比 Swift 6 供给更多体验优先级更高,假如有必要,答应咱们针对 Swift 6 进一步调试它们。
  • 关于某些模块,所有在 Swift 6 中改动的总数或许会形成搬迁深重,而且在 Swift 4.x/5.x 中逐个采纳这些言语改动,能够使过渡期路径变得丝滑。

一些提案现已引进了定制解决方案来供给搬迁路径:SE-0337 增加了 -warn-concurrency 在 Swift 4.x/5.x 中启用与 Sendable 相关查看的警告。 SE-0354 增加标志 -enable-bare-slash-regex 以启用原始 /.../ 正则表达式语法。虽然它不是提案的一部分,但对 SE-0335 的评论包含对编译器标志的请求,以在存在类型上要求运用 any 。这些都具有相同的风格,即选择现有的 Swift 4.x/5.x 代码进行改善,这些改善将呈现在 Swift 6 中。

这个提议明晰地包含了琐细的、有意选用的特性,这些特性在 Swift 6 之前出于源代码兼容性的原因而保存。它为逐渐选用 Swift 6 特性建立了一条直接路径,以在 Swift 4.x/5.x 代码库中获得它们的优势,并顺利搬迁到 Swift 6 言语形式。开发人员能够运用新的编译器标志 -enable-upcoming-feature X 为该模块启用名为 X 的特定功用,而且能够以这种方法指定多个功用。当开发人员移动到下一个首要言语版别时,该言语版别将隐含 X 而且编译器标志将被拒绝。这样,即将推出的功用标志只会累积到下一个首要的 Swift 言语版别,然后被清除,所以咱们不会将言语分拆成不兼容的方言。

Swift论坛

  1. SwiftUI 中的新功用 环绕 WWDC2022-10052 内容进行评论

  2. Swift 正则表达式 环绕 WWDC2022-110357 内容进行评论

  3. SwiftUI 导航 环绕 WWDC2022-10054 内容进行评论

  4. Swift 图表 环绕 WWDC2022-10137 内容进行评论

  5. 运用 cmake 构建 swift 而不是 build-script

build-scriptbuild-script-impl 的 python 包装器,本身是一个 shell 脚本,然后运行 CMake,履行能够构建项目的作业主体。 例如,假如您想履行 utils/build-script -x,将调用 cmake -G Xcode

  1. Visual Studio Code 增加扩展包 支持 Swift 开发

  2. SwiftNIO _ChannelInboundHandler 与 DocC 不兼容

在阅览 swift-biome 中的 SwiftNIO 文档时,遇到一个问题。文档其中引用了 3 个带下划线的特点。例如:_ChannelInboundHandler_EmittingChannelHandler 等,但是这些特点在 swift-biome 和其他依据 SymbolGraphGen 的东西是不行见的,包含 DocC。

  1. Foundation 中依据 KeyPath 的对比 API

Foundation 中引进的 KeyPathComparator API,比 Swift 中的 sorted(by:) 方法更明晰。这个 API 能够依据数组中的某个特定元素进行排序。

Swift 周报 第十期

引荐博文

SwiftUI 动画系列,文章结合动画 Gif 原图和源码为事例,深入探讨了如何创立应用 SwiftUI 动画。

高档 SwiftUI 动画 — Part 1:Paths

摘要: 本文首要介绍了显式动画和隐式动画,以及针对 Animatable 协议的相关评论。

高档 SwiftUI 动画 — Part 2:GeometryEffect

摘要: 首要介绍运用新东西 GeometryEffect 创立 SwiftUI 动画。GeometryEffect是一个符合Animatable 和 ViewModifier 的协议。

高档 SwiftUI 动画 — Part 3:AnimatableModifier

摘要: 本文首要介绍运用 AnimatableModifier 完成愈加复杂的动画作用。AnimatableModifier 是一个 ViewModifier,符合 Animatable 协议,假如对这个协议不了解能够阅览之前发布的两篇文章。

SwiftUI 动画进阶 — Part4:TimelineView

摘要: 前三篇高档 SwiftUI 动画是作者在实战中总结的内容。本篇文章,咱们将详细地探究 TimelineView。

SwiftUI 动画进阶 — Part 5:Canvas

摘要: 本篇文章将探究 Canvas 视图。从技能上讲,它不是一个动画视图,但当它与第四部分的 TimelineView 结合时,能够实际很多有趣的功用。

关于咱们

Swift社区是由 Swift 爱好者一同保护的公益组织,咱们会共享以 Swift实战SwiftUlSwift基础为核心的技能内容,也收拾搜集优秀的学习材料。

特别感谢 Swift社区 修改部的每一位修改,感谢大家的辛苦支付,为 Swift社区 供给优质内容,为 Swift 言语的发展贡献自己的力量。