Foundation 提供了许多应用程序中都有用的基础功能层,包括数字、数据、集合和日期的基本类型,以及任务管理、文件系统访问等功能。
它的设计考虑了以下目标
此项目 swift-foundation
为所有平台提供了关键 Foundation API 的共享实现。
在 macOS、iOS 和其他 Apple 平台上,应用程序应使用操作系统自带的 Foundation。Foundation 框架包含此代码。
在所有其他 Swift 平台上,swift-foundation
作为工具链的一部分提供。只需 import FoundationEssentials
或 import FoundationInternationalization
即可使用其 API。它也从 swift-corelibs-foundation 的 Foundation
、FoundationXML
和 FoundationNetworking
模块中重新导出。
注意
构建 swift-foundation 需要正在开发中的 Swift 6.0 工具链。您可以从 Swift 网站 下载 Swift 6.0 nightly 工具链。
在构建 Foundation 之前,首先确保您已安装 Swift 工具链。接下来,查看 Foundation 构建过程 指南的入门部分,以获取有关构建和测试的详细步骤。
Foundation 在不同的配置中构建,并由多个项目组成。
graph TD;
FF[Foundation.framework]-->SF
subgraph GitHub
SCLF[swift-corelibs-foundation]-->SF
SF[swift-foundation]-->FICU[swift-foundation-icu]
SF-->SC[swift-collections]
end
Swift 工具链中附带的共享库,用 Swift 编写。它为许多关键类型提供了核心实现,包括 URL
、Data
、JSONDecoder
、Locale
、Calendar
以及 FoundationEssentials
和 FoundationInternationalization
模块中的更多类型。它的源代码在所有平台上共享。
swift-foundation 依赖于一组有限的软件包,主要是 swift-collections 和 swift-syntax。
Swift 工具链中附带的共享库。它为需要 Foundation 中 pre-Swift API 的客户端提供兼容性 API。它使用 Swift 和 C 编写。它提供 NSObject
、基于类的数据结构、NSFormatter
和 NSKeyedArchiver
等类型。它重新导出 FoundationEssentials
和 FoundationInternationalization
模块,为在 swift-foundation 项目引入之前编写的源代码提供兼容性。由于这些实现与 Objective-C 中编写的实现不同,因此兼容性仅为尽力而为。
swift-corelibs-foundation 仅为非 Darwin 平台构建。它安装 Foundation
umbrella 模块、FoundationXML
和 FoundationNetworking
。
Foundation 的私有库,包装了 ICU。使用标准版本的 ICU 提供了国际化 API 行为的稳定性,并与 Darwin 平台上的最新版本保持一致。它仅从 FoundationInternationalization
模块导入。不需要依赖 ICU 提供的数据的 API 的客户端可以改为导入 FoundationEssentials
。
构建到 macOS、iOS 和所有其他 Darwin 平台中的框架。它由 C、Objective-C 和 Swift 组合编写。Foundation 框架将来自 swift-foundation 的源代码编译到其二进制文件中,并提供一个包含所有功能的 Foundation
模块。
Foundation 的目标是创建最佳的基本数据类型和国际化功能,并使其可供世界各地的 Swift 开发人员使用。它利用语言中出现的新功能,并使库和应用程序作者能够充满信心地构建更高级别的 API。
此项目是整个 Swift 项目 的一部分。它有一个工作组,旨在 (a) 监督 社区 API 提案,以及 (b) 与 Swift 项目和 Apple 平台的发展密切协调。工作组定期开会审查提案,关注 Swift 生态系统中出现的新趋势,并讨论库应如何发展。
Foundation 欢迎来自社区的贡献,包括错误修复、测试、文档以及移植到新平台。
我们使用 Swift 论坛进行讨论,并使用 GitHub Issues 来跟踪错误、功能请求和其他工作。
请参阅 CONTRIBUTING 文档以获取更多信息,包括接受社区为 Foundation 中的新 API 做出贡献的过程。