肘子的 Swift 周报 #026 | Swift,超越苹果生态!

肘子的话

我调整了周报的域名,换成了国内可以直接访问的网址。欢迎访问 weekly.fatbobman.com 订阅本周报的中英文电子邮件版本。

自 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

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 日从所有参与者中随机抽取出十位幸运者,每人赠送一箱🍒作为礼物。

往期内容

THANK YOU

如果你觉得这份周报或者我的文章对你有所帮助,欢迎 点赞 并将其 转发 给更多的朋友。

欢迎访问 weekly.fatbobman.com 订阅本周报的中英文电子邮件版本。

相关推荐
一丝晨光2 天前
继承、Lambda、Objective-C和Swift
开发语言·macos·ios·objective-c·swift·继承·lambda
KWMax2 天前
RxSwift系列(二)操作符
ios·swift·rxswift
Mamong2 天前
Swift并发笔记
开发语言·ios·swift
小溪彼岸3 天前
【iOS小组件】小组件尺寸及类型适配
swiftui·swift
Adam.com3 天前
#Swift :回调地狱 的解决 —— 通过 task/await 来替代 nested mutiple trailing closure 来进行 回调的解耦
开发语言·swift
Anakki3 天前
【Swift官方文档】7.Swift集合类型
运维·服务器·swift
KeithTsui4 天前
集合论(ZFC)之 联合公理(Axiom of Union)注解
开发语言·其他·算法·binder·swift
東三城4 天前
【ios】---swift开发从入门到放弃
ios·swift
文件夹__iOS7 天前
[SwiftUI 开发] @dynamicCallable 与 callAsFunction:将类型实例作为函数调用
ios·swiftui·swift