Swift 5.10 有哪些新功能?

这里每天分享一个 iOS 的新知识,快来关注我吧

前言

在上周,期待已久的 Xcode 15.3 & iOS 17.4 和 swift 5.10 终于发布了,上周也介绍了一些关于 iOS 17.4 相关的变化,感兴趣可以去看看:

iOS 17.4 来了,来看看有哪些大升级

今天主要来介绍一下 swift 5.10 新增了哪些新功能,因为据官方介绍,这个版本是 swift 5 的最后一个版本,下个版本就是 swift 6.0 了,所以这个版本也相当重要。

1、增强的并发检查

在此之前,使用并发代码编译器可能在某些情况下无法检测安全问题。在 Swift 5.10 中,Apple 已经修补了这些情况,编译器现在将在严格并发模式下正确标记所有不安全的代码。

但是这不包括你标记 nonisolated(unsafe) 或者 @unchecked Sendable 的代码,因为这两个标记都指示代码应该是安全的,但编译器将无法检查。

关于这点,在之后的 swift 版本中会作出更多的改进,可能会在 swift 6.0.

2、全局变量的严格并发

提案 SE-0412 合进了 Swift 5.10,它进一步增强了 Swift 在编译时防止数据竞争的能力。

当你编写涉及共享状态的代码时,如果你不确保这种共享状态可以安全地跨线程使用,你就会面临来自许多数据争用问题。

在 Swift 5.10 中,编译器只允许你在以下情况下从并发上下文访问共享的可变状态:

  • 这个状态是不可变的,并且标记 Sendable
  • 这个状态是隔离于 global actor

除此之外的情况,编译器会认为并发访问共享状态是不安全的。

3、允许协议嵌套在非通用上下文中

这个在之前的文章中介绍过,这里就不重述了,大家可以看之前的文章:

Swift 社区中一个有用的提案

4、弃用 @UIApplicationMain 和 @NSApplicationMain

@UIApplicationMain@NSApplicationMain 曾经是 iOS 和 macOS App 的代码入口函数。后来在 swift 5.3 版本引入了 @main 属性代替这两个关键字,迭代了几个版本之后,这两个关键字已经没有什么用了,默认的 Xcode 创建出来的项目也是 @main,所以在 swift 5.10 中将其废弃。

如果你使用 Xcode 15.3 的项目中依然使用 @UIApplicationMain 并且 @NSApplicationMain,将会看到一个警告:

这在 Xcode 15.3 中会以警告方式提醒,但是在以后的 swift 6.0 版本会直接报错。

最后

近些年来 swift 发展特别快,这得益于开源社区的贡献,swift 是开源的,任何开发者都可以向 swift 提交代码,关于 swift 的进化和代码贡献,以后专门写一篇文章来介绍。

Swift 的下一个版本将是 Swift 6。Swift 5.10 中的完整并发模型过于严格,一些 Swift Evolution 提案正在积极开发中,旨在通过消除错误的正向数据竞争错误来提高完全数据隔离的可用性。这项工作包括当编译器确定没有并发访问的可能性时,取消对跨隔离边界传递非 Sendable 值的限制,对函数和键路径进行更有效 Sendable 的推理等。

参考资料

1

SE-0412: github.com/apple/swift...

这里每天分享一个 iOS 的新知识,快来关注我吧

本文同步自微信公众号 "iOS新知",每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!

相关推荐
游戏开发爱好者88 小时前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
黑码哥8 小时前
ViewHolder设计模式深度剖析:iOS开发者掌握Android列表性能优化的实战指南
android·ios·性能优化·跨平台开发·viewholder
2501_9151063210 小时前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview
2501_9151063210 小时前
使用 Sniffmaster TCP 抓包和 Wireshark 网络分析
网络协议·tcp/ip·ios·小程序·uni-app·wireshark·iphone
熊猫钓鱼>_>10 小时前
移动端开发技术选型报告:三足鼎立时代的开发者指南(2026年2月)
android·人工智能·ios·app·鸿蒙·cpu·移动端
徐同保1 天前
通过ip访问nginx的服务时,被第一个server重定向了,通过设置default_server解决这个问题
ios·iphone
2501_915918411 天前
在 iOS 环境下查看 App 详细信息与文件目录
android·ios·小程序·https·uni-app·iphone·webview
2501_916007471 天前
没有 Mac 用户如何上架 App Store,IPA生成、证书与描述文件管理、跨平台上传
android·macos·ios·小程序·uni-app·iphone·webview
夏幻灵2 天前
HTTPS全面解析:原理、加密机制与证书体
ios·iphone
TheNextByte12 天前
如何在iPhone上恢复已删除的笔记的综合指南
笔记·ios·iphone