Swift 周报 第十六期

简介: 当你来到双水村以外的大世界,你的人生目标便不单单是一名庄稼人了。Swift社区陪你一起成长,一起创造更多可能!👊👊👊

前言

本期是 Swift 编辑组自主整理周报的第七期,每个模块已初步成型。各位读者如果有好的提议,欢迎在文末留言。

欢迎投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的朋友一起加入周报整理。

当你来到双水村以外的大世界,你的人生目标便不单单是一名庄稼人了。Swift社区陪你一起成长,一起创造更多可能!👊👊👊

周报精选

新闻和社区:【挑战上岛】适配实时活动和灵动岛

提案:函数反向部署

Swift 论坛:围绕 Swift 6 lock 展开的讨论

推荐博文:推荐 500+ 款 App UI 设计

工具推荐:妙言

话题讨论: 如果您年龄超过 35 岁被裁员,再入职时能接受降薪吗?

新闻和社区

挑战上岛:适配实时活动和灵动岛

Apple 大中华区设计与开发加速器推出全新挑战活动,邀请开发团队限期完成实时活动和灵动岛适配。

实时活动用于在 iPhone 锁屏以及灵动岛上显示来自 App 的最新信息,帮助用户及时查看当前任务和事件的进展。参与此次活动,您将了解如何设计和开发您的实时活动,以及如何利用灵动岛带来更出色的用户体验。

我们会提供主题设计与开发讲座,您将了解如何设计和开发您的实时活动,以及如何利用灵动岛带来更出色的用户体验。

参与讲座的开发团队可在讲座当天报名参与实时活动和灵动岛适配挑战,通过审核后可获得一对一的咨询与深度辅导。参加挑战,并能够在 2022 年 12 月 20 日前完成适配和上线的团队,将有机会获得更多 App 的推广机会。

名额有限。请在 2022 年 11 月 8 日前报名参加。

要报名参加,您必须是位于大中华区的 Apple Developer Program 成员。

用 SwiftUI 实现 App 导航

导航是一个 App 的核心,它可以将用户带往 App 里功能不同的页面当中,因此,清晰而强大的导航架构对 App 而言是非常重要的。通过本次活动,我们将从设计和研发两方面来为您介绍,如何使用 SwiftUI 来实现 App 的导航架构,让用户能快速定位到 App 的各项功能。

名额有限。请在 2022 年 11 月 7 日前报名参加。

要报名参加,您必须是位于大中华区的 Apple Developer Program 成员。

使用最新 Beta 版本,做好充足准备

Beta 版iOS 16.2、iPadOS 16.2、 macOS 13.1、Apple tvOS 16.2 和 watchOS 9.2 现已推出。请确认您的 App 在这些版本上工作正常,确保 App 做好准备。要利用最新 SDK 中的改进功能,请务必使用 Xcode 14.1 RC 2 进行构建和测试。

要了解之前 Beta 版本中的已知问题是否已解决或是否有临时应对办法,请查看最新的发布说明。如果您遇到问题或有其他反馈,请告诉我们。我们十分重视您的反馈,并相信您的反馈对我们解决问题、优化功能和更新文档将大有助益。

Apple Search Ads 推出全新广告投放位置,现已亮相 App Store

Apple Search Ads 让您能轻松地在 App Store 上推广自己的 App。现在,借助全新的“Today”标签页和产品页广告投放位置,您在 App Store 上提升 App 曝光度的机会大大增加 — 当人们首次登陆、搜索特定内容和浏览要下载的 App 时,都是您推广自己 App 的大好时机。

在中国大陆的 App Store 上暂不可用。

提案

通过的提案

SE-0375 允许非可选非空参数传递给可选类型的参数 提案已通过。该提案已在十五期周报正在审查的提案模块做了详细介绍。

SE-0373 取消 result builders 中对变量的所有限制 提案已通过。该提案已在十五期周报正在审查的提案模块做了详细介绍。

正在审查的提案

SE-0377 提出了新的 borrowtake 参数修饰符 正在审查。

本提案提出的 borrowtake 参数修饰符,允许开发人员自主选择函数,用于接收不可变参数的所有权约定。这样可以通过减少调用函数所需的 ARC 来优化性能,并为 move-only 类型提供了必要的先决条件,指定函数是否会消耗 move-only 值。

SE-0376 函数反向部署 提案正在审查。

弹性 Swift 资源库,例如 Apple 平台 SDK 中存在的库,作为动态库分发。这些库的作者使用 @available 注释来指示引入声明的操作系统版本。

函数反向部署可以避免下面的缺点:

  1. 当原始库可用时,首选使用原始库的 API。
  2. 当客户端二进制文件永远不会使用时,API 实现的后备副本不存在。

SE-0366 代码上下文新增敏感关键字 move 修订后,重新审查。该提案已在十一期周报正在审查的提案模块做了详细介绍。

Swift论坛

1) 提议隔离函数 Value 和 Sendable

2) 提议Swift Distributed Actors (Cluster)")

提议动机: 在 Swift 5.7 中,分布式 Actor 被引入为名义类型。 与 Actors 类似,它们可以使用 distributed actor 关键字对来声明。 就它们自己而言,它们不能真正做任何事情, 所有分布式的行为比如 actor 的行为实际上都由给定 actor 类型相关联的 ActorSystem 处理。具体来说,一个 actor 必须声明它将与什么类型的 actor 系统一起使用,如下所示:

import Distributed
import DistributedCluster
distributed actor Greeter {
    typealias ActorSystem = ClusterSystem
    distributed func hello(name: String) -> String {
        return "Hello \(name)!"
    }
}

这样的 Greeter 声明可以在集群分布式 actors 系统中使用此类。 也可以声明一个模块范围的默认分布式 actor 系统类型。有关更多信息,可以参考 Swift Distributed Actor RuntimeSwift Distributed Actor Isolation 这是大多数用户可能使用此功能的方式,如下所示:

typealias DefaultDistributedActorSystem = ClusterSystem

为了避免在每个分布式 actor 模块中重复声明 ActorSystem 类型别名。这里提出的包提供了 ClusterSystem 的实现。

解决方案: DistributedCluster 中包括 ClusterSystem 类型,它是库的核心部分。 创建之后,它会绑定到主机/端口对并开始监听传入连接:

@main
struct Main {
    static func main() async throws {
        let system = await ClusterSystem("FirstSystem") { settings in
            settings.endpoint.host = "127.0.0.1"
            settings.endpoint.port = 7337
        }
        
        try await system.terminated
    }
}

3)提议Package Registry Authentication

SE-0292(API 规范)中提出的package registry服务可能需要对其部分或全部 API 进行身份验证,以便识别执行操作的用户并相应地授权请求。

提议动机: Web 服务中常见的身份验证方法包括基本验证 (authentication), access token 和 OAuth。 SwiftPM 目前仅支持基本验证,这限制了它与包注册服务交互的能力。
建议的解决方案: 建议修改 swift package-registry 指令和 registry 的配置并且加入 token authentication 的支持。 这些更改还应确保将来可以灵活地添加其他验证方法。

4)提议方便的 AsyncThrowingStream.makeStream 方法

SE-0314中介绍了 AsyncStream 和 AsyncThrowingStream,它们充当标准库提供的 AsyncSequence。

提议动机:在使用 Async[Throwing]Stream 一段时间后,我们发现一个常见的用法是将 continuation 和 Async[Throwing]Stream 传递到不同的地方。这需要将 Async[Throwing]Stream.Continuation excaping 并且出传递给初始化程序的闭包。Escaping continuation 使用起来不方便,因为它需要对隐式 optional value 进行格外的操作。

建议的解决方案:为了填补这个不足,建议在 AsyncStream 和 AsyncThrowingStream 上添加一个新的静态方法 makeStream ,它返回 stream 和 continuation。

5) 讨论围绕 Swift 6 lock 展开的讨论

6) 讨论围绕 leetcode 2259 题 Remove Digit From Number to Maximize Result 展开的讨论

工具推荐

妙言: 一个简洁好看的开源的 Mac Markdown 编辑器,没有任何多余的功能,使用原生 Swift 开发,轻量性能高,安全纯本地使用,具备语法高亮、黑暗模式、自动格式化、单独编辑、演示模式、图床等功能。

话题讨论

如果您年龄超过 35 岁被裁员,再入职时能接受降薪吗?

关于我们

Swift社区是由 Swift 爱好者共同维护的公益组织,我们会分享以 Swift实战SwiftUlSwift基础为核心的技术内容,也整理收集优秀的学习资料。

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

目录
相关文章
|
人工智能 小程序 机器人
Swift 周报 第二十期
在这个来去匆匆风云变幻的季节,Swift社区更像一个密不透风的茧,为的只是有朝一日能够破茧成蝶。👊👊👊
127 0
|
安全 搜索推荐 编译器
Swift 周报 第十三期
昔孔子登泰山而小天下, 今诸君阅Swift社区皆足矣。请君浅读,与君共勉!👊👊👊
175 0
Swift 周报 第十三期
|
人工智能 自动驾驶 程序员
Swift 周报 第十九期 |技术汇总
十期磨一剑,废铁亦有形,Swift社区就是你梦想已久的香格里拉,哪怕青冥长天,纵然绿水波澜!👊👊👊
168 0
|
存储 供应链 API
Swift 周报 第十八期
蝴蝶的生命之所以如此短暂,因为它的翅膀太过精致了。Swift社区之所以浩瀚汹涌,因为它总想牵动起每一位读者的心!👊👊👊
156 0
Swift 周报 第十八期
|
Web App开发 安全 Linux
Swift 周报 第十七期
风起雨坠袭大地,叶落冬来又一年。Swift社区,和你同风雨,与你共未来!👊👊👊
132 0
|
传感器 存储 数据采集
Swift 周报 第十五期
果然,十一假期与新一轮疫情撞了个满怀,远方的你还好吗?Swift社区愿与你携手,一起尖叫一起笑,一起撑伞一起闹!👊👊👊
174 0
Swift 周报 第十五期
|
安全 程序员 编译器
Swift 周报 第十四期
小时候幸福很简单,长大后简单很幸福。Swift社区有你未领取的小幸福,等你简简单单来开启!👊👊👊
133 0
|
安全 5G 网络安全
Swift 周报 第十二期
夏夜恬静月色柔,绵绵思绪埋心头,Swift社区常逗留,今夕明朝百事欧。欧拉欧拉👊👊👊
225 0
|
供应链 算法 JavaScript
Swift 周报 第十一期
平凡的八月,不平凡的世界,你若落后,必定挨打,你若前进,方得始终!**Swift社区**,给你最新的指引,给你最真的铠甲!
293 0
Swift 周报 第十一期
|
XML 存储 前端开发
Swift 周报 第十期
昨日的生活与工作是否也曾迷茫?对新技术渴望突破的心是否依旧执着?Swift社区,为你的技术栈添砖加瓦,你,准备好了吗?
155 0
Swift 周报 第十期