前言
本期是 Swift 编辑组自主整理周报的第五十六期,每个模块已初步成型。各位读者如果有好的提议,欢迎在文末留言。
Swift 周报在 GitHub 开源,欢迎提交 issue,投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的朋友一起加入周报整理。
夜色难免黑凉,前行必有曙光。Swift社区不相信运气,但坚信勇气。且与旧事归于尽,明日依旧迎花开!
周报精选 新闻和社区:苹果暂停高端 Vision 头戴设备研发 计划推出更廉价版Swift 论坛:讨论 Swiftly 即将推出的增强功能 推荐博文:Swift 中的仓库设计模式详解 话题讨论: 苹果将新 AI 功能限制在高端设备的策略,这会让你换新的 iPhone 吗? 上期话题结果
在目前情况下,全国统一高考试卷的实施需要谨慎对待。虽然统一试卷在一定程度上能够提高考试的公平性和质量,但也必须考虑到各地教育发展的不平衡性。
新闻和社区
苹果与消费者修改 3500 万美元 iPhone 音响和解协议
2024 年 7 月 22 日
苹果公司和消费者的律师更新了一项价值 3500 万美元的和解协议,该协议将解决苹果公司销售的 iPhone 7 和 7 Plus 手机音质差、通话能力受损的指控。美国加州北区地方法院于 2023 年 11 月初步批准了该和解协议。消费者称,iphone 的一个缺陷降低了音频质量,使其难以拨打电话或使用 Siri 等功能。(来源:新浪网)
苹果(AAPL.US)因监管担忧今年不会在欧盟推出 AI 功能
2024 年 7 月 22 日
苹果( AAPL.US )拒绝向欧盟数亿消费者提供大量 AI 新技术,理由是欧盟监管机构试图控制大型科技公司,这引发了担忧。苹果今年将不会对欧盟用户发布 Apple Intelligence、iPhone Mirroring 和 SharePlay Screen Sharing,因为据称《数字市场法》会迫使苹果降低产品和服务的安全级别。
苹果在一份声明中说,“我们担心《数字市场法》对互操作性要求可能会迫使我们以削弱用户隐私和数据安全的方式损害产品的完整性”。
《数字市场法》对被归为“看门人公司”的互联网巨头企业提出一系列规范性要求,包括不得滥用市场支配地位打压或并购竞争对手、不得未经用户允许强行推送广告或安装软件,不得将采集的用户数据移作他用等等。违者将被处以相当于该企业年营业额 10% 的高额罚款。作为规定的一部分,欧盟指定 6 家最大的科技公司为“看门人”——需要更严格审查的强大平台。除苹果外,这份名单还包括微软( MSFT.US )、谷歌母公司 Alphabet( GOOGL.US )和 Facebook 所有者 Meta Platforms(META.US)。
欧盟委员会在回应苹果的计划时表示:“只要遵守我们旨在确保公平竞争的规定,我们欢迎守门人在欧洲提供服务。”
苹果的 AI 技术“苹果智能( Apple Intelligence )”是其最近全球开发者大会( WWDC )演讲的亮点,该演讲还包括对苹果操作系统的更新。该技术将有助于总结文本、创建原始图像,并在用户需要时检索最相关的数据。这一举措还包括升级后的 Siri,这是苹果曾经开创性的数字语音助理。这些新功能在最近几周帮助推动了苹果股价的上涨。自 7 月 10 日的 WWDC 发布会以来,苹果股价已经上涨了约 9%,使该公司的估值超过 3.2 万亿美元。
苹果决定停止在欧盟的推广 AI 技术服务,这意味着欧盟所有 27 个国家的消费者,包括法国、德国、西班牙和意大利等国,目前将无法获得该公司雄心勃勃的新人工智能技术。这款软件将于今年秋天在其他地方推出,但只适用于苹果的一小部分设备,而且只支持美式英语。目前尚不清楚这些功能可能如何违反《数字市场法》,但苹果拒绝提供该技术可能会激怒该地区的消费者,他们可能会向监管机构施加压力。
苹果高管已经在大型科技公司的市场垄断问题上与欧盟发生争执。苹果最早将于周一收到欧盟监管机构根据《数字市场法》发出的正式警告,原因是苹果涉嫌阻止应用程序引导用户在网络上进行更便宜的订阅交易——根据传统的反垄断法,苹果今年早些时候已经被布鲁塞尔监管机构处以 18 亿欧元( 19 亿美元)的罚款。(来源:智通财经网)
苹果暂停高端 Vision 头戴设备研发 计划推出更廉价版
2024 年 7 月 19 日
据《信息报》周二报道,援引自一家为苹果 VisionPro 提供关键部件的制造商员工,苹果公司目前已经暂停了对下一代高端 Vision 头戴设备的研发。此消息一出,立即在科技界引发了广泛关注。
报道中提到,有供应链及耳机制造的相关人士透露,这家知名的 iPhone 制造商目前正集中精力,计划在明年年底之前推出一款价格更为亲民、功能较为简化的 Vision 产品。面对路透社的评论请求,苹果公司尚未立即作出回应。
业内分析认为,这一策略调整可能与市场需求的变化有关。苹果原计划在包括中国和日本在内的八个新国家推广其售价为 3500 美元的 VisionPro,以期提振销量。然而,在产品发布初期的热潮过后,该设备面临着需求放缓的挑战。
本月早些时候,在苹果的年度开发者大会上,公司揭开了其人工智能战略的神秘面纱,同时宣布了与 ChatGPT 的制造商 OpenAI 的合作关系。这一消息发布后,苹果股价得到了显著提升,今年迄今为止已上涨超过 11%。这一涨幅是在年初中国 iPhone 需求疲软,苹果股价一度落后于其他大型科技公司的情况下实现的。
报道还提到,苹果原本打算效仿 iPhone 的产品线,将 Vision 产品分为标准版和 Pro 版两种型号。但现在,随着研发重点的转移,这一计划可能会有所调整。
据悉,苹果在过去的一年中逐渐降低了 VisionPro 继任产品的开发优先级。公司内部资源分配的变化显示,开发下一代车型的员工数量在减少,而公司更多地专注于降低第一代车型的零部件成本,以提高产品的市场竞争力。(来源:环球网)
Swift论坛
1) 宣布Swift 项目的新 GitHub 组织
内容概括
Swift 编程语言正在迁移到一个专门的 GitHub 组织(GitHub.com/swiftlang)。这一迁移反映了 Swift 社区的成长和成熟,并强调了 Swift 在 Apple 生态系统之外的多样性。新的 GitHub 组织将为协作和创新创造更有利的环境,使 Swift 能够扩展到更多平台和用例。
迁移将分阶段进行,初始范围包括 Swift 项目的基础元素,如编译器、核心工具、标准库、核心 API、示例、Swift.org 网站以及官方客户端和驱动程序等。
迁移过程将解决几个关键的治理方面,包括新项目整合方法、扩大贡献者基础、明确提交者角色,以及扩展持续集成支持。
这是一个社区范围的努力,由核心团队、贡献者体验工作组、Swift 服务器工作组和网站工作组等多个群体共同推动。迁移将逐步进行,保持完全透明。
作为第一步,swift-evolution 仓库将于今天迁移,其他仓库将在接下来的几周内陆续转移。核心团队对过去十年来为 Swift 梦想做出贡献的每个人表示深深的感谢,并期待 Swift 的下一个篇章。
2) 讨论[已接受] Swift 测试的新方向
内容概括
将成立 Swift 测试工作组,隶属于生态系统指导小组。
该愿景是 swift-testing 项目的延续,旨在改进 Swift 的测试 API 和工具。
语言指导小组和平台指导小组已审核并接受了这一愿景。
该文档强调了测试的目标和基本设计方法,具体设计将由社区讨论和审核。
然而,有评论指出:
- 这些变化主要是表面的,focusí 于改善易用性和表达能力。
- 缺乏解决开发者在测试中遇到的最大问题的雄心,例如没有涉及模拟(mocking)。
- 模拟是开发者最 struggle 的部分,与 Swift 的严格类型系统相矛盾。
- 需要更多、更大的创意来真正实现 Swift 测试的"新方向"。
总的来说,这个愿景虽然有所进步,但可能不足以称为测试的"新方向",还需要更多实质性的改进。
3) 讨论Swiftly 即将推出的增强功能
内容概括
Swiftly 即将推出的增强功能
Swiftly 是一个命令行工具,帮助用户开始使用 Swift 工具链并在多个版本之间轻松切换。以下是计划中的主要改进:
- macOS 支持:扩展到 macOS 平台。
- 命令代理:允许为不同项目指定特定工具链版本。
- 迁移到纯 Swift:将安装脚本逻辑移至 Swiftly 本身。
- 移除 GitHub API 依赖:改用 swift.org 获取元数据和更新。
- 新功能:
- 查询可用工具链
- 设置项目默认版本
- 改进安装体验
这些改进旨在使 Swiftly 成为 Swift 的默认安装体验,提高易用性和灵活性。
对于 CI 系统,将考虑提供迁移指南。系统级包管理器仍是最无缝的安装方式,但 Swiftly 提供了更灵活的用户级管理。
为改善用户体验,计划调整系统依赖项安装流程,提高透明度并保持用户级工具的心智模型。对于 CI 环境,可能会添加检测 root 用户并自动安装依赖的功能。
总体目标是让 Swift 开发更accessible,并为新手提供更好的体验。
4) 讨论在某些情况下,“包”访问级别可以是隐式的吗?
内容概括
讨论涉及 Swift 编程语言中 package
访问级别的隐式使用。主要问题是:为什么包类型的成员声明不能默认为 package 访问级别?
提议的优点:
- 减少代码中显式
package
关键字的使用,可能减少约85%。 - 如果类型已标记为 package,其成员通常也需要相同级别的可见性。
反对意见:
- 可能会降低代码的可读性,使读者更难理解代码。
- 可能会影响本地推理能力。
讨论还涉及了代码读者如何查找成员引用的问题。对于 public、private 和 fileprivate 成员,查找方法明确。而对于 internal、package 或无显式修饰符的成员,都需要使用全局搜索。
提议者认为,在大多数成员都是 package 可见性的情况下,显式的 package 修饰符可能成为视觉干扰。但如果大多数成员是 internal 的,则当前做法更好。
最后,讨论指出,即使采用提议的更改,读者也可以通过一次"跳转到定义"操作来确定类型的访问级别。
总的来说,这个讨论权衡了代码简洁性和可读性之间的关系,以及对代码作者和读者的影响。
5) 讨论在 switch case 中绑定枚举
内容概括
这个问题讨论了在 Swift 中如何在 switch 语句中绑定枚举值。作者提出了两种方法:
- 使用 if let 进行可选绑定,然后在 switch 语句中匹配枚举值。这种方法是有效的。
- 作者希望在 switch 语句中直接处理可选的枚举值,并在每个 case 中绑定非空值。这种语法在 Swift 中是无效的,但作者想知道是否有类似的方法可以实现。
作者强调他们主要出于学术原因对这个问题感兴趣,并且关注的是如何在 case 语句内引用枚举实例,而不是具体的处理逻辑。
这个问题探讨了 Swift 语言中枚举处理和模式匹配的高级用法,反映了对语言特性和语法糖的深入思考。
6) 讨论分布式、分布式集群模块的初学者建议
内容概括
主要讨论了分布式系统中的 Distributed 和 DistributedCluster 模块的使用建议,特别是针对初学者。作者正在尝试解决 Fly.io的Gossip Glomers 挑战中的"高效广播"问题,希望使用这些模块来实现节点间的通信和消息传播。
主要内容包括:
- 作者介绍了他在 Elixir/Erlang 生态系统中的分布式系统背景。
- 解释了"高效广播"挑战的要求: 25 个程序实例需要形成集群并进行消息广播。
- 询问是否有现成的模块可以实现集群、节点发现和通信功能。
- 讨论了 Swift 的 ClusterSystem 与 Erlang 节点系统的异同:
- 两者都是基于 TCP 端口的对等节点系统
- Erlang 有额外的守护进程简化了本地节点发现
- Swift 目前需要手动编写节点加入代码,但后续可能会改进
- 提供了在 Swift 中启动多个集群节点的代码示例。
- 建议改进文档,以便更好地解释节点加入过程和集群形成。
- 提出了添加类似 Erlang 的辅助守护进程的想法,以简化 Swift 中的集群配置过程。
文章强调了改进文档和用户体验的重要性,以使 Swift 的分布式系统开发对初学者更加友好。
6) 讨论为什么assumeIsolated()现在需要T:Sendable?
内容概括
这段讨论涉及 Swift 语言中的区域隔离(Region-Based Isolation, RBI)和并发安全性。主要观点包括:
- Swift 使用"并发域"而非线程作为并发安全的基础,这可能是一个优势。
- RBI 允许在独立区域间传输非 Sendable 值,这引入了新的能力和复杂性。
- 有人表示,RBI 的引入使 Swift 并发的安全性变得更加难以理解。
- 每个新版本的 Swift 编译器都可能将之前认为安全的操作标记为不安全,这增加了开发者的困惑。
这段讨论反映了 Swift 并发模型正在不断演进,同时也带来了一些挑战和争议。
推荐博文
swift 使用 swift-protobuf 协议通讯,使用指北
摘要: 文章全面介绍了如何在 Swift 中利用 Swift-protobuf 进行高效的协议通信。作者解释了 Protocol Buffers 的优势,如高效性、简洁性和版本兼容性,以及适用场景。介绍了如何安装 Swift-protobuf 编译器,并通过示例展示了如何编译 .proto 文件生成 Swift 代码。随后,文章详细介绍了如何将生成的 Swift 代码集成到项目中,确保项目能够顺利使用 Swift-protobuf。此外,文章还探讨了常见问题的解决方法,特别是关于模块引用错误的处理。
在文章的最后作者还通过一个简单的 SwiftUI 示例演示了如何创建、序列化和反序列化协议消息对象,帮助读者理解实际应用中的操作流程。这篇文章结构清晰,内容详尽,为想要在 Swift 应用中应用 Protocol Buffers 的开发者提供了全面的指导和实用技巧。
Swift 中的仓库设计模式详解
摘要: 这篇博客详细介绍了如何使用仓库(Repository)设计模式在Swift应用中管理数据访问逻辑。文章从定义仓库接口开始,使用 Swift 的协议(protocol)来描述数据操作方法,例如创建、删除和查找用户。接着演示了如何创建多个仓库实现,包括基于内存和基于 UserDefaults 的实现,这些实现隐藏了具体数据存储的细节。
最后,文章展示了如何在应用中使用 ViewModel 来操作数据,通过依赖注入不同的仓库实现,实现了数据访问逻辑的灵活切换。通过仓库设计模式,开发者能够更好地组织和测试应用的数据访问层,提升代码的灵活性和可维护性。
Swift中的扩展:以及何时使用它们
摘要: 这篇文章介绍了如何使用 Swift 中的扩展(Extensions),以扩展已有的类、结构体、枚举或协议,增加新功能。无论是自定义类型还是框架中的现有类型,扩展都可以创建自定义访问器,提升与类型的互动体验。文章解释了扩展的基本概念及其在所谓的逆向建模中的应用,让你能在无法访问源代码的情况下,仍能为类型添加自定义功能层。通过示例展示了如何在不同情境下使用扩展,包括为类型添加新属性、实现协议及提供默认行为。总体来说,本文帮助开发者掌握使用 Swift 扩展的重要技能,从而优化代码结构和提高可重用性。
话题讨论
苹果将新 AI 功能限制在高端设备的策略,这会让你换新的 iPhone 吗?
- 会的。AI 功能需要大量计算能力,而旧设备可能难以顺利提供。
- 不会。这是推动新硬件销售的理由,再多的RAM也跟不上模型的发展速度。
- 中立。我计划至少再使用我的 iPhone 几年,苹果智能不是升级的理由。
欢迎在文末留言参与讨论。
关于我们
Swift社区是由 Swift 爱好者共同维护的公益组织,我们在国内以微信公众号的运营为主,我们会分享以 Swift实战、SwiftUl、Swift基础为核心的技术内容,也整理收集优秀的学习资料。
特别感谢 Swift社区 编辑部的每一位编辑,感谢大家的辛苦付出,为 Swift社区 提供优质内容,为 Swift 语言的发展贡献自己的力量。