Swift5.7(下)

1、新的时间表示法

SE-0329 为 Swift 引入了一种新的标准化方式来引用时间和持续时间。它可以拆解为三个主要部分:

  • Clock:表示一种测量时间流逝的方式。又分为 2 种。
    • ContinuousClock:系统处于睡眠状态时也记录时间。
    • SuspendingClock:系统处于睡眠状态时不会记录时间。
  • Instant:表示一个精准的瞬间时间。
  • Duration:表示 2 个Instant之间的时间间隔。
// 当前时间 + 3秒
ContinuousClock.Instant.now + Duration.seconds(3)
// 当前时间 + 50毫秒
ContinuousClock.Instant.now + Duration.microseconds(50)

// 应用于Concurrency
try await Task.sleep(until: .now + .seconds(1), clock: .suspending)
try await Task.sleep(until: .now + .seconds(1), tolerance: .seconds(0.5), clock: .continuous)

// 异步函数
func doSomeAsyncWork() async throws {
    try await Task.sleep(until: .now + .seconds(1), clock: .continuous)
}

// SuspendingClock
let suspendingClock = SuspendingClock()
// 测量
let elapsedOne = try await suspendingClock.measure {
    try await doSomeAsyncWork()
}

// ContinuousClock
let continuousClock = ContinuousClock()
// 测量
let elapsedTwo = try await continuousClock.measure {
    try await doSomeAsyncWork()
}

2、顶级代码的并发

SE-0343 升级了 Swift 对顶级代码的支持——想想 macOS 命令行工具项目中的 main.swift —— 以便它支持开箱即用的并发。这个变化看起来微不足道,但为了支持它需要相当多的工作。

实践上,这个变化意味着我们可以将这样的代码直接写入 main.swift 文件:

let url = URL(string: "https://hws.dev/readings.json")!
let (data, _) = try await URLSession.shared.data(from: url)
let readings = try JSONDecoder().decode([Double].self, from: data)
print("Found \(readings.count) temperature readings")

你可能感兴趣的:(Swift5.7(下))