Swift 应用的基础
Foundation框架为Apps和其他框架提供基本功能。 Foundation 定义的类、协议和数据类型在macOS、iOS、watchOS 和tvOS SDK 中很常见。
2016年,Swift-corelibs-Foundation项目推出了Foundation的开源Swift版本,它在Foundation的开源C实现上封装了一个Swift层。基金会项目团队认为,随着Swift的发展,框架开发策略也需要调整。 Swift 是Apple 开发的一种现代通用语言。虽然它有很多用途,但主要用于iOS和Mac应用程序开发。
当前苹果工程师Chris Lattner 于2010 年开始构建Swift 语言时,这只是一个副项目。当时,Lattner 在使用编程语言C++ 时遇到了挑战。 “C++ 是一种复杂的语言,”Lattner 详细地说。 “C++ 和Objective-C 都不好,它们都是环境的产物。但我们可以做得更好。”
Lattner 从Objective-C、Rust、Haskell、Ruby、Python、C#、CLU 等语言中汲取灵感,完成了基础架构设计。当拉特纳意识到Swift 可能是一个更好的选择时,他开始寻求资金并在苹果内部组建了一个团队来研究它。之后,他带领开发团队完成了语法设计、编译器、运行时、框架、IDE和文档等相关工作。
经过多年的迭代,根据官网数据,Swift在编写应用程序时比Objective-C快2.6倍,比Python 2.7快8.4倍。
在Swift 之前,构建iOS 应用程序的主要语言是Objective-C,但越来越多的iOS 项目正在使用Swift 编写。移动设备市场的持续增长也为Swift的持续发展提供了支持。在TIOBE 12 月发布的编程语言流行度指数排名中,Swift 排名第15 位,超越Objective-C 的第19 位。
除了Apple 之外,Lyft、Uber、Airbnb 和Square 等公司现在也在使用Swift。随着Swift开发需求的增加,Swift开发者的收入也随之增加。国外网站DevJobsScanner最近对全球超过1000万个开发岗位进行了调查。结果显示,Swift入选十大高收入编程语言,排名第七。 Swift 开发人员的平均年薪为114,000 美元,但薪资上限可达每年230,000 美元。
如今,几乎所有Swift 项目都使用Foundation 框架。随着Swift应用越来越多,Foundation框架的重要性不言而喻。
Foundation框架在iOS系统中的位置
Foundation 框架将如何发展?
Foundation 框架愿景的一个重要部分是为服务器端应用程序提供更小、更细粒度的模块选项。基金会团队还从模块分类入手,简要介绍了下一阶段的开发思路。
模块拆分
以下是官方初步的模块划分思路。这不是最终版本。该团队还在征求社区的反馈。
基础要点
这些模块类型用于大多数应用程序,并且没有额外的系统依赖性。该包可能依赖于关键的Swift 包,例如Collections 或Algorithms,但保证会添加稍后出现的新依赖项,而不会对Essentials 的整体大小产生太大影响。
下面列出的每种类型都将Foundation 构建为一个整体库,该库提供基本实用程序类,提供设计模式的先例,并提供一定程度的操作系统依赖性自由以增强可移植性。具体包括:
URL、Data、UUID、Date、DateInterval、PropertyListSerialization、JSONSerialization、PropertyListDecoder、JSONDecoder 和编码器、NotificationCenter、AttributedString、SortDescriptor、Measurement、Dimension、Unit、ProcessInfo、UserDefaults(范围可能有限,例如某些类型的字段)、文件管理器、文件句柄、进程、管道、捆绑包。
考虑到语言本身的进步,一些API也需要更新和升级。例如,团队认为Process 等API 应该使用async/await。通过将其包含在Essentials 包中,团队希望与社区一起推进API 迭代。然而,短期内,现有的API 将继续为依赖它们的项目提供服务。
基础国际化
以下类型主要强调更好地处理日期/时间,或向用户呈现格式化数据:FormatStyle 协议和所有特定格式样式类型、Locale、Calendar、TimeZone、DateComponents、Locale 特定字符串扩展、CharacterSet(此API 可能会重新设计)或扩展以更好地适应Swift String)、URLResource、LocalizedError、Morphology。
基础网络
FoundationNetworking 模块已从Foundation 中分离出来,并将继续提供相同的网络API。团队已经确定了Essential类型,特别是URL,所以下一步是统一Swift中的FoundationNetworking实现,主要包括URLSession、URLRequest、URLResponse等相关类型,HTTPCookie、HTTPURLResponse等相关类型。
基础XML
FoundationXML 模块已从Foundation 中分离出来,并将继续提供相同的XML 解析API。确定了Essential类型和FoundationNetworking之后,下一步就是在Swift中统一FoundationXML的实现,主要包括:XMLDocument、XMLDTD、XMLDTDNode、XMLElement、XMLNode、XMLParser。
基础ObjC兼容性
以下类型主要用于与Darwin Foundation 或遗留代码交叉编译,主要包括: NSObject
NSValue、NSNumber、NSError、NSNull、几何类型、NS/CGRect、NS/CGPoint、NSEdgeInsets 等。
微模块还是单体设计?
为什么不将Foundation中的每个类型拆分成一个单独的包,以便随时可以独立导入?团队认为,最好的方法是在每个模块一个包和所有模块一个包之间实现最佳平衡。
如果每个组件都被视为一个单独的模块,那么模块之间的关系数量将会迅速增长,并且需要保证模块之间的每个接口都必须是稳定的和公共的。发现一个本应仅在Intimacy 模块中使用的接口实际上在其他地方使用可能会无意中限制团队未来改进整体API 的能力。
因此,团队决定划分具有外部依赖的模块。外部依赖项通常是严重二进制膨胀的根源,如果依赖项的交付未得到适当控制,则可能会导致下游客户端发生冲突。
移除的类型
在Darwin平台上,团队需要保持所有现有API接口的兼容性。但团队将新的统一实现重点放在那些最有用的Swift API 上。该团队在博客文章中表示:“这代表了思想上的重要转变,尤其是对swift-corelibs-foundation 最初提出的100% 源代码兼容性目标的颠覆。” Foundation的很多功能都包含在该语言的直接支持中,因此新包暂时不会考虑引入以下类型:
RunLoop、Lock、OperationQueue、Stream、Port、Timer等,被结构化并发取代。 NS 前缀集合类型- 最初是出于兼容性原因而提供的,但实用性一直没有很大NSCoding、NSKeyedArchiver – 被Codable Progress 取代- 没有外部依赖,但与结构化并发的重叠部分尚未完全设计
在Darwin 上,基金会框架将继续通过C、Objective-C 和Swift 的组合来维护各个类型的实现。
结束语
消息发布后,社区不少开发者表示很高兴看到这样的改变。开发者Joakim_Hassila 评论道:“作为一个明确避免使用Foundation 的人,我只想做一个简短的积极评论—— 这看起来是一个非常实用的方法,并且基于可能的外部依赖项构建模块是有意义的”
然而,这仅仅是开始。基金会团队还需要为开发者解决更多技术细节,以及回答有关项目后续开发的问题,例如哪个基金会负责以及iOS/macOS 应用程序是否会使用这个新的Swift 基金会。
参考链接:
https://www.swift.org/blog/future-of-foundation/
用户评论
寻鱼水之欢
哇塞!开源Foundation框架,这可是大事件!iOS应用开发者们有福了!
有14位网友表示赞同!
酒笙倾凉
期待Foundation框架的开源能带来更多创新,让iOS开发更便捷!
有14位网友表示赞同!
颓废i
Apple终于开源了Foundation框架,这意味着我们可以在iOS应用中自由使用它了吗?
有17位网友表示赞同!
那伤。眞美
Foundation框架开源后,会不会有更多优秀的第三方库出现?
有9位网友表示赞同!
莫飞霜
开源意味着更多的开发者可以参与贡献,Foundation框架未来可期!
有19位网友表示赞同!
花开丶若相惜
开源Foundation框架,Apple这是要打开iOS开发的大门吗?
有20位网友表示赞同!
情深至命
Apple开源Foundation框架,这是不是意味着iOS开发将更加开放?
有8位网友表示赞同!
柠栀
开源Foundation框架,会不会带来更多新的开发模式?
有15位网友表示赞同!
单身i
终于可以自由使用Foundation框架了,期待它能给iOS开发带来更多惊喜!
有12位网友表示赞同!
旧爱剩女
这个消息太棒了,终于可以更深入地了解Foundation框架的内部机制了!
有9位网友表示赞同!
青衫故人
开源Foundation框架,Apple真是越来越开放了!
有14位网友表示赞同!
眼角有泪°
Foundation框架开源后,开发者们可以更方便地进行二次开发了!
有5位网友表示赞同!
短发
终于可以摆脱对Apple框架的依赖了!
有17位网友表示赞同!
醉红颜
开源Foundation框架,这将是一次重大的变革!
有9位网友表示赞同!
呆萌
期待Foundation框架开源后,会诞生更多优秀的iOS应用!
有5位网友表示赞同!
╯念抹浅笑
希望Foundation框架开源后,能促进iOS生态的繁荣发展!
有16位网友表示赞同!
抓不住i
Apple开源Foundation框架,这将为iOS开发带来无限可能!
有9位网友表示赞同!
将妓就计
终于可以更深入地研究Foundation框架了,太激动了!
有5位网友表示赞同!
一纸愁肠。
开源Foundation框架,这将是一个新的开始!
有6位网友表示赞同!
安之若素
Apple开源Foundation框架,这将会改变iOS开发的未来!
有19位网友表示赞同!