将 AI 整合至日常工具链 - 肘子的 Swift 周报 #66
大语言模型已然成为我日常工作和生活中不可或缺的得力助手。目前,我主要通过对话方式与它互动。虽然随着模型能力的提升,这种交流方式越发流畅自然,但当各类需求混杂在同一会话中时,效率往往难以达到理想状态。为此,我在过去几周开始尝试运用提示词来定制一些面向特定任务的专用会话。
大语言模型已然成为我日常工作和生活中不可或缺的得力助手。目前,我主要通过对话方式与它互动。虽然随着模型能力的提升,这种交流方式越发流畅自然,但当各类需求混杂在同一会话中时,效率往往难以达到理想状态。为此,我在过去几周开始尝试运用提示词来定制一些面向特定任务的专用会话。
我所在的城市颇具特色 —— 现有机场位于市区中心,与各核心区域的距离都不超过 10 公里。这样得天独厚的地理位置为市民出行带来了极大便利。然而,正是这个位置制约了机场的发展:近十年来,机场一直在满负荷运转,几乎无法开通新航线;同时,由于四周被密集的居民区包围,跑道的飞行区等级也受到限制。
尽管世界局势并不平静,2024 对我而言却是一个充实美好的年份。这一年里,我写下了 47 篇文章,发布了 51 期周报,也能感受到自己对 Swift、SwiftUI 的理解在不断深入。而最令我欣慰的,是全家人都健康平安。
在 Xcode 16 中,为了改善 SwiftUI 在 Swift 6 模式下的表现,苹果对 SwiftUI 框架的 API 进行了多项调整,以满足更严格的并发检查要求。其中最显著的变化是将 View 协议全面标注为 @MainActor。这些优化虽然总体上改善了开发者在 Swift 6 模式下的编程体验,但也在某些特定场景中引发了一些看似反常的编译错误。本文将详细探讨为什么某些视图修饰器中无法直接使用 @State 属性值,并提供相应的解决方案。
2024 年是我接受肾脏移植后的第六个年头。回望这一年,个人的健康状况平稳顺遂。就在岁末之际,我看到了两则令人振奋的消息——两项异种肾脏移植的突破性进展,让我对未来充满希望
onAppear 是 SwiftUI 中极其关键的生命周期方法,用于在视图呈现时注入关键逻辑。由于视图实例可能会频繁地被创建和重建,开发者通常会选择在这些方法中准备数据、执行初始化操作。理论上,这些生命周期方法的调用时机应当是可预测和一致的。然而,在某些特定场景下,onAppear 可能会出现非预期的、不必要的调用,这不仅可能导致性能开销,更可能引发应用状态的不可控变化。本文将揭示这一容易被忽视的 SwiftUI 行为陷阱,并提供临时的应对策略。
两年前,一位朋友问我,他六岁的孩子对编程产生了兴趣,有什么编程语言可以推荐。考虑到他已经有了 iPad 和 MacBook,我毫不犹豫地推荐了 Swift Playgrounds。几天前,另一位朋友也咨询了类似的问题,尽管我仍然推荐 Playgrounds,但远没有两年前那样坚决。因为如今的 Swift 是否还适合初学者,我有些不确定了。
Core Data 的一个卓越特点是让开发者能够以更加接近面向对象编程的方式声明数据模型,同时无需关心底层的存储实现细节。在这个框架中,模型继承是一个尤为重要的机制。本文将深入探讨模型继承的核心概念,包括父实体(Parent Entity)、子实体(Sub Entity)和抽象实体(Abstract Entity);我们将分析它们的优缺点,并探讨在不直接使用这些功能时如何实现类似的效果。
上周,我的一件物品需要修理,商家告诉我大约需要两个小时,于是我带上笔记本开车前往一家购物中心。直到将物品交给商家时,我才意识到犯了一个错误:忘记带手机了。这个看似不大的疏忽,在接下来的两个小时里给我带来了一连串的小麻烦。
随着社交媒体渠道的日益丰富,一个网络用户不知不觉间已拥有多个不同的社交账号。对于内容创作者和企业账号管理者而言,在各个社交平台上发布内容所需的准备工作正变得愈发繁琐。在过去的一个月里,我开始尝试使用 Typefully 来统一管理和发布多个社交平台的内容,本文中我将分享我的使用心得。
上周六,家里客厅的一个双控开关突然失灵了。这本是司空见惯的小故障,但对我而言,却别有一番意味。这是我 18 年前安装的众多智能开关中最后一个尚能正常工作的,它的“退役”,标志着传统智能设备在我生活中的全面落幕。
SwiftUI 提供的 onChange 修饰器,使开发者能够在视图中监听特定值的变化,并在值发生改变时执行相应的操作。直觉上,只要某个视图位于当前可见的视图树分支中( 活动中 ),在观察的值发生变化时,对应的闭包就应该被触发。但在某些特定的导航场景下,onChange 修饰器似乎会“选择性失聪”,明明观察的值发生了变化,却诡异地保持沉默。这究竟是苹果精心设计的特性,还是一个隐藏已久的代码缺陷?本文将揭示这一现象并对开发者给予必要的提醒。
“为什么总是推荐这些令人反感的新闻或短视频?要如何才能屏蔽掉它们?”这是我父亲最近经常提起的问题。尽管我教给了他一些技术手段(如选择减少类似推荐、屏蔽特定账号),但现实是:一旦用户“画像”形成,想要改变这些推荐内容,往往需要相当长的时间才能见效。这凸显了一个残酷的真相:在算法推荐的世界里,用户的主动选择权重远低于想象,平台对流量的追逐才是根本驱动力。在这个逻辑下,即便是负面情绪带来的流量也是流量,“黑粉”也是“大数据”算法中的重要一环。
在数据持久化操作中,确保数据的一致性和完整性至关重要。SwiftData 框架通过在 ModelContext 中引入 transaction 方法,为开发者提供了一种更优雅的方式来组织和管理数据操作。本文将探讨如何运用事务(Transaction)的概念来构建更可靠、高效的持久化操作。
家里的淋浴间出现了渗水情况。尽管漏水量很少,但这个问题已经困扰了一段时间。找来了一位经验丰富的维修师傅,他带着超声波和热成像两种漏水检测仪上门,却因渗水量太小无法定位。更有趣的是,就像许多患者到了医院后症状会消失一样,自从预约了维修师傅后,渗水情况便消失了。
SwiftUI 中,视图的自动刷新机制让我们能够轻松构建响应式的用户界面。但有时,视图可能并不会按照我们的预期进行更新。本文将通过一个看似简单但颇具代表性的 TimelineView 刷新问题,探讨 SwiftUI 的视图刷新机制。
visionOS 2.2 测试版本的发布,终于为 Apple Vision Pro 带来了期待已久的“宽”和“超宽”虚拟屏幕模式。在超宽模式下,使用者眼前会呈现出一个可以超越物理视野限制的庞大显示空间。尽管 Apple Vision Pro 的硬件分辨率有其局限性,但得益于焦点渲染(Foveated Rendering)技术的加持,虚拟屏幕不仅较此前更为清晰,更能带来堪比 8K 显示器的视觉体验。
Core Data 和 SwiftData 作为 Apple 生态系统中强大的持久化框架,不仅提供了 @FetchRequest 和 @Query 这样的声明式数据监听工具,更内置了一套完整的数据追踪与通知机制。了解和掌握这些机制对于构建健壮的数据驱动型应用至关重要。本文将带你探索从简单的自定义通知,到强大的持久化历史追踪(Persistent History Tracking 和 SwiftData History)等多层次的解决方案,助你应对各种复杂的数据同步场景。
近日,Pixelmator 官方宣布即将加入苹果,目前正在等待监管部门的最终审批。他们承诺,旗下主打产品——Pixelmator Pro、iOS 版 Pixelmator 以及 Photomator 在短期内将不会发生重大变化。