# 26 : Swift,超越苹果生态!

发表于

肘子的话

自 2014 年正式亮相以来,Swift 已步入其发展的第十个年头。虽然自 2015 年末起 Swift 便开始支持 Linux,但长期以来,其在非苹果平台上的推广和应用进展缓慢,许多人仍旧将 Swift 视作苹果生态下的专属语言。

然而,值得高兴的是,Swift 社区从未放弃将 Swift 推向更广阔平台的梦想。得益于语言特性的持续丰富与工具链的不断优化,近两三年来,Swift 在跨平台方面取得了显著进步。

首先,Swift Server Workgroup(SSWG)所开发的 Swift for Visual Studio Code 极大地提升了在 VSCode 上开发 Swift 的体验,为开发者提供了更加方便的跨平台开发环境。此外,通过引入新的语言特性及支持这些特性的第三方库,Swift 在服务器端的表现也得到了进一步加强。随着 Foundation 框架的 Swift 原生化,即便是习惯于苹果开发生态的开发者,在其他平台上也能使用越来越多熟悉的 API。

除了社区的努力外,语言在其他平台的成功同样依赖于一些幸运和标志性产品的出现。随着 Arc 浏览器 Windows 版本在今年的发布,预计将有更多 Windows 用户和开发者通过这款主要基于 Swift 开发的大型桌面应用接触并了解到 Swift,这无疑将会对 Swift 在其他平台的普及产生积极影响。

几天前,OpenSwiftUI 发布了 0.10 版本。自 SwiftUI 问世以来,社区中不断有开发者尝试将其移植到其他平台,尽管声明式 UI 部分的实现相对顺利,但响应式处理一直是难题。在这个新版本中,首次在非苹果平台复刻了 SwiftUI 框架的核心基础——AttributeGraph,从而具备了完整地将 SwiftUI 的优势全面带到其他平台的可能性。

我在过去两年中还了解到两款尚未公开的 SwiftUI 复刻框架,其中一款同样面向全平台。

Swift 也未忘记在嵌入式领域的探索。社区不仅为语言增添了更适合嵌入式开发的 功能和示例,更有厂商推出了易于使用的 一体化开发套件

随着 Swift 自身的持续进化以及社区与各方的共同努力,未来几年中,Swift 必将在更多平台和应用场景中展现力量,Swift 开发者的技能也将得到更广泛的应用。

原创

新框架、新思维:解析 Observation 和 SwiftData 框架

Fatbobman( 东坡肘子 )

这是我在 Let’s VisionOS 2024 上的演讲内容。为了便于阅读,我对原始内容进行了简化,并调整为更加书面化的表达。本次分享的核心是传达这样一个中心思想:尽管这些新框架是为了解决现有框架中的问题而设计的,但我们不应被过往的经验和惯例所限制。需要用开放的心态和全新的视角去学习和使用这些新工具。将采用新框架的过程视为将项目向更安全、更现代化方向重构的绝佳机会。

近期推荐

Exploring ABI stability, @frozen, and library evolution mode

Aryaman Sharda

自 Swift 5 起,Swift 实现了 ABI 稳定性,这一突破性特性确保了不同版本的 Swift 编译的应用程序与库之间能够无缝交互,免除了重新编译的需求。同时,库进化模式赋予了 Swift 库以时间的推移进行更新而不损害与旧版的兼容性的能力。Aryaman Sharda 在本文中深入探讨了 ABI 稳定性与库进化模式,并通过实例详细说明了 @frozen 关键字在枚举和结构体中的应用。这些功能的共同作用强化了 Swift 生态系统的稳定性和向后兼容性,为开发者提供了更加流畅和高效的开发体验。

Exploring Claude: Streaming Messages Using Claude 3 Haiku

Rudrank Riyam

自去年以来,生成式人工智能技术经历了爆炸式增长。除了在聊天工具和助手应用场景外,生成式 AI 还能在哪些领域发挥作用?在这篇文章里,Rudrank Riyam 为我们揭示了如何利用 Claude 3 Haiku —— 一种既经济又高效的后端服务,来为音乐应用提供消息的流式处理功能。当用户查询某个音乐风格时,应用便会把这个查询作为消息发送给 Claude 3 Haiku,后者随后以流式的形式返回推荐数据。

对我而言,对 AI 的应用一直局限于辅助工具。然而,在最近的 Let’s VisionOS 2024 活动中,Jane 的演讲向我们展示了如何运用生成式 AI 服务处理自然语言,并以约定的格式返回 JSON 数据的技巧。这给了我许多全新的灵感。这样的方法和思维模式预计将很快被更广泛的开发者采纳,为用户带来更便捷的体验。

Adaptive Text Color in SwiftUI based on Background

Pedro Rojas

在开发过程中,开发者时常遭遇这样一个问题:相同颜色的文字在不同背景色上可能难以辨认,尤其是当背景色与文字颜色对比度不足时。针对此问题,Pedro Rojas 在本篇文章中提供了一个解决方案,即依据背景色的亮度动态调整文本颜色,以此确保文本与背景之间的最佳对比度,显著提升用户界面的可读性。文章中不仅阐述了这一概念的实现过程,还附带了一个完整的演示,展现了如何在 SwiftUI 环境下应用这一技术。

Image Processing Using Swift

Hina Khan

Xcode Playgrounds 是一款强大的工具,它对初学者和经验丰富的开发者都同样有用,能够帮助用户迅速验证概念和学习新的 API。在这篇文章中,Hina Khan 展示了如何使用 Playgrounds 进行图像处理,创造出既动态又吸引人的视觉效果。此外,Playgrounds 内置的 Quick Look 功能为开发者提供即时反馈,极大地提升了开发滤镜的效率。本文通过浅显易懂的方式介绍了图像处理的基本概念,使读者能够掌握并应用这些技术创造个性化的图像效果。

想要了解 Xcode Playgrounds 的更多使用技巧,请参考 玩转 Xcode Playground

In Search of a Smooth Scroll

Edvinas Byla

SwiftUI 提供了众多的惰性容器,以 Lazy 为前缀的容器大多基于 SwiftUI 原生实现,虽然它们增强了控制能力,但在性能方面却存在明显不足。在实际开发中,Edvinas Byla 意识到 LazyVGrid 的性能并不理想,且不能满足他对上下文菜单行为的特定需求,因此他决定采用 NSTableView 作为替代方案。在转向 AppKit 的过程中,他探讨了一些鲜为人知的 AppKit 组件,如 NSTableHeaderCell 等,并通过 NSViewRepresentable 构建了 SwiftUI 与 AppKit 之间的桥梁。通过对 NSTableViewNSTableCellView 的精心定制,他不仅显著优化了滚动体验,还解决了上下文菜单相关的问题。文章中,作者强调他的目的并非是要比较 SwiftUI 与 AppKit 的性能优劣,或者质疑 SwiftUI 在 macOS 上的应用适用性。实际上,该应用的复杂模板编辑器几乎完全使用 SwiftUI 开发,且表现出色。这一点彰显了 SwiftUI 在实际应用中的强大潜力和灵活性。

活动

WWDC 2024 愿望清单征集

上周,我发起的征集 WWDC 2024 愿望清单的推文收到了超过 80 条回复,其中有不少的内容与人工智能有关,例如:

  • 为 Xcode 引入类似 Copilot 的编程助手功能
  • 在选择国内 AI 服务合作伙伴时需要更加谨慎
  • 提供生成式 AI 的框架或 API

此项活动仍在持续进行中。诚邀你在 这条推文 下留言分享你对 WWDC 2024 的期望。我将在 5 月 20 日从所有参与者中随机抽取出十位幸运者,每人赠送一箱🍒作为礼物。

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

Fatbobman(东坡肘子)

热爱生活,乐于分享。专注 Swift、SwiftUI、Core Data 及 Swift Data 技术分享。欢迎关注我的社交媒体,获取最新动态。

你可以通过以下方式支持我