# 60 : Older or Outer?我开始怀念非智能时代

发表于

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

肘子的话

上周六,家里客厅的一个双控开关突然失灵了。这本是司空见惯的小故障,但对我而言,却别有一番意味。这是我 18 年前安装的众多智能开关中最后一个尚能正常工作的,它的“退役”,标志着传统智能设备在我生活中的全面落幕。

18 年前,“智能家电”还只是一个模糊的概念,智能开关也没有统一标准可言。作为当时的科技发烧友,我购买了数十个施耐德 ULTI 系列的开关和控制器。记得刚安装完成的那几个月,我沉浸在用遥控器调节灯光氛围的新奇中,热衷于向来访的朋友展示这“未来感”十足的智能生活场景。然而,这份热情也仅维持了短暂的几个月。并非智能设备不够出色,而是我渐渐意识到,即便不依赖它们,生活依然可以丰富多彩,人工近距离操作也并不会造成实质性的不便。

如今,“智能”已然成为家用电器的标配词汇。冰箱、电视、空调、洗衣机、热水器,近几年购入的电器几乎无一例外地标榜着“智能”和“联网”功能。我能理解并接受某些设备的智能化需求,但当连抽油烟机、燃气灶这类厨房设备都开始声称具备联网功能时,我不得不怀疑这种智能的必要性。除了极个别产品,我并未将家中所有智能产品都纳入 App 控制,因为内心始终认为:真的有这个必要吗?“智能”当真如此重要?已然成为生活的刚性需求了吗?

过度“智能化”的困扰同样延伸到为我正在为太太更换座驾这件事上。智能驾驶、超大屏幕、炫目的交互方式,已然成为当下车企竞相追逐的研发方向,且这股风潮也迅速侵蚀着传统车企的设计理念。如今,要找到一款保留足够实体按键、屏幕尺寸克制、提供契合人体生理感受驾驶体验的车型,正变得越来越困难。我不无担忧:再过几年,市场上或许就再难觅到不那么“智能”的汽车了。

我绝非技术保守主义者,依然是一个乐于学习、善于接纳新事物的人。然而,我愈发清晰地感受到:当前产品正以一种愈发明显的趋势过度“智能化”。尽管这更像是商业营销的噱头,但长此以往,厂商很可能会逐渐忘记在产品核心功能上下功夫,转而过分热衷于华而不实的表面文章。每每察觉到这种趋势,我就不由自主地怀念起非智能时代的产品:单纯且稳定,本真且踏实。

无论个人意愿与否,人类或许已不可避免地走向一个全面智能的时代。既然如此,我们更应该为消费者保留更多的选择空间,为那些不愿被过度智能化包围的人,提供一些保留传统操作方式、将智能功能巧妙隐藏的产品。技术的发展应该尊重使用者的多元需求,而非单方面地强制推进。

原创

有意为之还是技术缺陷?SwiftUI 多层导航中的 onChange 异常

Fatbobman(东坡肘子)

SwiftUI 提供的 onChange 修饰器,使开发者能够在视图中监听特定值的变化,并在值发生改变时执行相应的操作。直觉上,只要某个视图位于当前可见的视图树分支中( 活动中 ),在观察的值发生变化时,对应的闭包就应该被触发。但在某些特定的导航场景下,onChange 修饰器似乎会“选择性失聪”,明明观察的值发生了变化,却诡异地保持沉默。这究竟是苹果精心设计的特性,还是一个隐藏已久的代码缺陷?本文将揭示这一现象并对开发者给予必要的提醒。

本文发表后,我陆续收到开发者的反馈,指出在不同场景下也遇到了 onChange 失效的情况。这进一步表明,这可能是一个长期存在且未被充分关注的 Bug。

近期推荐

在 Mac Catalyst 应用中使用 AppKit (Using AppKit in Your Mac Catalyst App)

Seb Vidal

虽然苹果在最近的 SwiftUI 版本中显著提升了 macOS 的原生功能,但许多开发者仍选择通过 Catalyst 将他们的应用快速迁移到 macOS 平台。Catalyst 确实大大简化了适配工作,但它也存在一个显而易见的局限:无法直接使用一些 Catalyst 无法转换的 AppKit 组件。在本文中,Seb Vidal 展示了如何利用私有的 _UINSView 和 AppKit 桥接机制,在 UIKit 应用中灵活引入原生的 AppKit 组件,从而弥补 Catalyst 的不足,并进一步扩展应用功能。

调用隐藏的 Swift 函数 (Calling Hidden Swift Functions)

Noah Martin

@_spi 是 Swift 中一个功能强大却鲜为人知的属性。简单来说,它赋予了方法“选择性隐藏”的能力,使得这些方法无法通过公开 API 使用,但在了解其方法签名的情况下,仍可通过特定方式引入并调用。苹果在其多个官方框架(如 SwiftUI)中广泛使用此功能,以限制某些功能仅供内部或特定模块使用。在这篇文章中,Noah Martin 深入探讨了如何调用 Swift 框架中隐藏的函数,并详细展示了突破苹果框架限制、使用未公开的系统编程接口(SPI)的多种方法。这不仅揭示了 SPI 的运作机制,也为开发者提供了扩展框架功能的新思路。

EmergeTools 在构建 SnapshotPreviews 时使用了该技巧,成功调用了 SwiftUI 框架中未公开的将预览渲染为图片的功能。

使用自然语言框架 (Working with Natural Language Framework)

Artem Novichkov

苹果的 Natural Language 框架为实时处理自然语言提供了强大的工具。在本文中,Artem Novichkov 展示了 NL 框架的多种实际应用,包括:

  • 基于语义的文本搜索:通过 NLEmbedding 实现语义匹配,提升搜索功能的智能化水平。

  • 情感倾向分析:利用 NLTagger 评估文本的情感得分,区分正面、负面或中立的情绪。

  • 动态背景渐变:结合情感分数,使用 iOS 的 MeshGradient 技术创建实时更新的视觉效果。

macOS 编程技巧:线程管理 (macOS Tips for Programmers: Threading)

Luna Razzaghipour

在 macOS 平台上进行开发时,线程管理和优先级设置不仅关乎性能优化,更直接影响系统的能耗和用户体验。在本文中,Luna Razzaghipour 深入解析了 macOS 独特的线程管理机制,强调了 QoS 在任务优先级和资源调度中的核心作用。Luna 指出,通过正确理解 QoS 类别并广泛采用 Dispatch 框架,开发者可以充分利用 macOS 的硬件特性,在保证应用性能的同时实现更高的能效。

开发者对话 #4:Matt Massicotte (Dev Conversations #4: Matt Massicotte)

Natan Rolnik and Matt Massicotte

作为 Swift 并发模型领域的专家,Matt Massicotte 发表了多篇关于这一主题的文章,并亲自参与编写了 Swift 6 迁移指南。在本期由 Natan Rolnik 主持的访谈中,Matt 分享了他的丰富开发经历以及对 Swift 并发编程的深入见解。

🪜 调试 SwiftUI 布局:技巧与方法 (Debugging SwiftUI Layouts: Tips, Tricks, and Techniques)

Wesley Matlock

SwiftUI 虽然让构建 UI 变得轻松有趣,但调试布局问题却常常成为开发者的难点。Wesley Matlock 在本文中分享了一系列实用的调试技巧,帮助开发者快速定位和解决 SwiftUI 布局中的常见问题。Matlock 指出,调试 SwiftUI 布局不仅是解决问题的过程,更是深入理解 SwiftUI 布局系统的绝佳机会。通过巧妙利用视觉调试工具、Xcode 的调试功能以及布局分析技术,开发者可以更高效地优化布局,打造质量更高的应用界面。

活动

Advent of Code 2024

Advent of Code 2024 将于 12 月 1 日至 12 月 25 日 举行,每天发布一个全新的挑战,难度逐步递增。这是一个不可多得的机会,让你在年末的这段时间里通过动手实践提升算法能力,打磨编程技巧,同时享受解题带来的成就感。

Swift 社区热情邀请所有开发者参与这一年度活动。无论你是经验丰富的 Swift 专家,还是刚入门的初学者,Advent of Code 都能以其丰富有趣、充满挑战的题目激发你的创意,并带你深入探索 Swift 的广泛应用场景。同时,这也是一个绝佳的机会,让你与社区中的开发者交流心得、学习技巧、分享灵感。

如果你想参与,请访问 Swift 社区的论坛帖子,了解详细的参与方式、相关讨论以及实用建议。不要错过这个在学习与挑战中度过节日的精彩机会!

如果你还没有尝试过在 Xcode 之外开发 Swift 项目,这次活动将是一个不错的契机。通过使用 Advent of Code Starter 模板,你可以体验在其他编辑器中开发 Swift 代码的乐趣,解锁更多可能性。

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