前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift 5.10 新特性

Swift 5.10 新特性

作者头像
YungFan
发布2024-06-12 08:29:51
1030
发布2024-06-12 08:29:51
举报
文章被收录于专栏:学海无涯学海无涯

Swift 5.10 内置于 Xcode 15.3,这应该是 Swift 6 之前的最后一个小版本,因此新特性不多。

废弃@UIApplicationMain与@NSApplicationMain

@UIApplicationMain@NSApplicationMain曾经是 iOS 与 macOS App 的程序入口,Swift 5.3 之后引入了@main作为新的程序入口。Swift 5.10 之后它们被正式废弃。

代码语言:javascript
复制
// Swift5.10之后废弃
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
}

// Swift5.10之后使用
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
}

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

Swift 5.10 之前,协议必须是顶级类型,但 Swift 5.10 之后,允许协议嵌套使用。

代码语言:javascript
复制
// 嵌套在非泛型函数与闭包中
func doSomething() {
    protocol someProtocol {
      func method()
    }
}

// 嵌套在类中
class TableView {
  protocol Delegate: AnyObject {
    func tableView(_: TableView, didSelectRowAtIndex: Int)
  }
}

class Delegate: TableView.Delegate {
  func tableView(_: TableView, didSelectRowAtIndex: Int) {
  }
}

并发编程

  • 增强的并发检查:Swift 5.10 之后,编译器将正确标记所有并发编程中的不安全的代码,并且会给出提示。
代码语言:javascript
复制
@MainActor
class MyModel {
    init() {
        MainActor.assertIsolated()
    }

    static let shared = MyModel()
}

func usedShared() async {
    // 警告:Expression is 'async' but is not marked with 'await'
    let model = MyModel.shared
    // let model = await MyModel.shared // 正确
}
  • 全局变量的严格并发:Swift 5.10 之后,进一步增强了防止数据竞争的能力。
代码语言:javascript
复制
// 警告:var 'mutableGlobal' is not concurrency-safe because it is non-isolated global shared mutable state
var mutableGlobal = 1

@MainActor func mutateGlobalFromMain() {
    mutableGlobal += 1
}

nonisolated func mutateGlobalFromNonisolated() async {
    mutableGlobal += 10
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 废弃@UIApplicationMain与@NSApplicationMain
  • 在通用上下文中允许协议嵌套
  • 并发编程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档