Swift 5.10 新特性

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

废弃@UIApplicationMain与@NSApplicationMain

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

// Swift5.10之后废弃
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
}

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

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

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

// 嵌套在非泛型函数与闭包中
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 之后,编译器将正确标记所有并发编程中的不安全的代码,并且会给出提示。
@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 之后,进一步增强了防止数据竞争的能力。
// 警告: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
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 特性 在 Swift 中有两种特性,分别用于修饰声明和类型。特性提供了有关声明和类型的更多信息。例如,使用 dis...
    xiaofu666阅读 1,216评论 0 2
  • 1、swift的Array类型可以持有任何类型的值——对象和非对象都可以。 2、声明数组主要有两种语法,数组实例也...
    仗键天涯阅读 474评论 0 0
  • Swift 5.1现在已经正式发布,尽管只是次要版本,它包含了大量的更改和改进。从基本的新功能,例如模块稳定性(使...
    韦弦Zhy阅读 616评论 1 6
  • 学习路上的疑惑为什么在看过一些博客或是文档后,过上一两天,也可能是半天就忘记了呢?反思后,我意识到有两个方面的问题...
    最晴天阅读 1,264评论 1 2
  • 有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj...
    njpkhuan阅读 190评论 0 0