# 49 : 创新可以有很多种

发表于

Graphics by Vincenz Lee | GadgetMatch

为您每周带来有关 Swift 和 SwiftUI 的精选资讯!

肘子的话

苹果在发布 iPhone 16 几小时后,华为也举行了新品发布会,推出了全球首个量产的三折屏手机 Mate XT。这款产品以其独特造型和精巧机械结构一亮相便吸引了众多关注。

近年来,苹果的 iPhone 系列在外观上变化不大,这让 Mate XT 的登场带来了一种耳目一新的感觉,使人立即感受到形态上的创新。然而,兴奋之余,一些人开始质疑:考虑到其相对较高的价格和折叠屏的局限性,Mate XT 是否只是为了创新而创新,对普通消费者而言实际意义不大?

作为一家饱受制裁影响的企业,华为近年来面临巨大挑战。由于芯片制程受限,华为的移动产品在算力和能效比方面与世界顶级设备存在一定差距。在这种情况下,推出具有话题性和独特性的产品无疑是一种聪明的市场策略。华为并没有止步于此,他们在材料、生产工艺、软件适配等多个方面都做出了创新和突破,可谓在当前受限状况下找到了一条有效的创新之路。

随着未来几年制程工艺的突破,当华为具备了与主流一线品牌相当的算力和能效比,加上原生鸿蒙系统和相应开发生态的成熟,华为必将在主流移动设备形态上展现出更强的竞争力。届时,他们很可能会在其他方面展示其创新能力,让更多消费者切身体验到创新的成果。

至于苹果,虽然近几代 iPhone 外观相似,每年的性能提升已难以让消费者感受到明显变化,但苹果在影像能力尤其是视频方面的持续深耕,已在行业中取得了不小的领先优势。随着网络速度的快速提升和云存储成本的持续下降,视频正成为大众记录生活、表达自我的首选方式,甚至有望重塑我们的生活与工作模式。当这种变革积累到一定程度,曾被忽视的”微创新”将爆发出惊人的力量。苹果在视频技术领域的多年积累,终将凝结为一个划时代的产品标签,其影响力不亚于 iPhone 初次集成 iPod、浏览器和手机功能时的革命性创新。届时,现在还显新奇且小众的空间视频拍摄与展示技术,也将成为苹果生态系统中的又一道坚固的护城河。

创新的形式可以千变万化,有些创新能立即让使用者眼前一亮,而有些则需要时间来彰显其价值。无论是华为还是苹果,它们都依据自身的市场环境、技术储备和传统优势,持续推出受市场欢迎的产品,展现出强大的创新能力和整合实力。在这个快速变化的科技世界里,创新永远是推动发展的核心动力。

近期推荐

我遇到的最奇怪的 Core Data 崩溃 (The weirdest Core Data crash I have seen)

Filip Němeček

在使用 Core Data 过程中,Filip Němeček 遭遇了一个异常问题:每当尝试为以 new 开头的属性赋值时,应用便发生崩溃。经过一番排查,他找到了这一问题的根源——一个源自苹果系统的较为古老的设定:在自动引用计数(ARC)环境下,属性命名不得以 new 开头。Filip 在本文中记录了这一发现,并分享了相关资料,目的是帮助其他开发者避免在这一问题上浪费时间。

尽管 SwiftData 的默认实现当前基于 Core Data,但由于 SwiftData 没有为 Model 单独声明 NSManagedObject 的子类,因此这一命名约束并不适用,开发者仍可以自由地使用 new 作为属性名称的前缀。

SwiftUI 的 @Observable 宏并非 ObservableObject 的完美替代品 (SwiftUI’s Observable macro is not a drop-in replacement for ObservableObject)

jesse squires

因其更精准的响应机制,@Observable 宏在 SwiftUI 框架中被视为 ObservableObject 的潜在替代品。然而,二者在底层实现和初始化机制上的差异导致在某些情况下表现出显著的行为差异。Jesse Squires 在本文中深入分析了这些差异如何影响应用行为,并通过实际示例揭示了在使用过程中可能遇到的问题。此外,作者还探讨了 SwiftUI 状态管理机制中存在的问题,并提出了采用更合理的架构来避免这些问题的建议,以协助开发者优化他们的 SwiftUI 应用。

SwiftData 表达式探究 (SwiftData Expressions)

Keith Harrison

SwiftData 在其初版中因缺少类似 NSExpression 的构建能力,而未能提供构建复杂谓词的功能。归功于新引入的 #Expression 宏,这一缺陷在 iOS 18 中得到了改善。在本文中,Keith Harrison 介绍了如何利用这一新 API 构建复合谓词,实现在数据库端的高效筛选。然而,尽管 #Expression 宏理论上扩展了 SwiftData 的表达能力,作者也指出在实际应用中,谓词和表达式的使用仍面临一些限制和挑战。

从 Objective-C 转换到 SwiftUI 的应用重构 (Converting an App from Obj-C)

Sarah Reichelt

App Store 会对长期未更新的应用程序发出警告,如在给出的最终期限前仍未更新会导致应用被下架。Sarah Reichelt 最近面临了这一挑战。她的应用原先是用 Objective-C 编写的,在本次强制更新中,Reichelt 选择了采用现代的 SwiftUI 框架进行重构。她在文章中分享了这一转换过程中遇到的技术挑战、采用的解决方案,以及她从这次经验中获得的见解和体会。

Swift Testing: 使用表现力强的 API 验证你的代码 (Swift Testing: Validate your code using expressive APIs)

Antoine van der Lee

Swift Testing 框架通过提供清晰且富有表现力的 API,彻底改变了 Swift 中编写测试的方式。这一框架简化了测试代码,使得开发者可以更直观地编写和管理测试。在本文中,Antoine van der Lee 介绍了这一新框架的使用方法,并展示了如何通过全局定义和 #expect 宏来简化测试断言。作者还承诺在未来几周内提供一系列深入探讨的文章,包括如何将现有的 XCTest 迁移到 Swift Testing。

内存泄漏:一部 Xcode 侦探故事 (The Memory Leak: An Xcode Detective Story)

Jacob Bartlett

由于内存泄漏问题,Jacob Bartlett 的应用在响应深链接(deep links)时遇到了一个 Bug,导致导航动画异常地出现两次。在这篇文章中,他详细描述了调试过程,从分析问题到确认问题源头,再到最终的解决方案。此外,他还讨论了 Swift 的内存管理机制,包括强引用、弱引用以及引用计数的工作原理。

visionOS 2 PortalComponent:更符合期待的传送神器

Puffinwalker

PortalComponent 在现实场景上创建一个视觉上的“门户”,通过这个门户,用户可以看到并与不同的虚拟环境或场景互动。在 visionOS 2 版本中,这项功能得到了进一步的增强。Puffinwalker 在本文中介绍了新增的两种模式:ClippingCrossing,这两种模式显著改善了现实延展效果,使得 Portal 内的模型能够更自然地延伸到外部世界。

每周一晚,与全球开发者同步,掌握 Swift & SwiftUI 最新动向
可随时退订,干净无 spam