Swift 6.0 新特性

2024-07-05 15:13:14 浏览数 (2)

Swift 发布十周年之际 Apple 推出了大版本 Swift 6.0,其内置于 Xcode 16,带来了如下的新特性。

Int128与UInt128

增加 128 位整数类型Int128UInt128

代码语言:javascript复制
// Int128
var a: Int128 = 10
// UInt128
let b: UInt128 = 20

集合

增加了RangeSet类型,用于处理对集合执行复杂操作之后的结果。

代码语言:javascript复制
struct Student: CustomStringConvertible {
    let stuno: String
    let stuname: String
    let stuclass: String

    var description: String {
        "学生信息: (stuno) - (stuname) - (stuclass)"
    }
}

let students = [
    Student(stuno: "12345", stuname: "张三", stuclass: "移动互联"),
    Student(stuno: "23456", stuname: "李四", stuclass: "物联网"),
    Student(stuno: "34567", stuname: "王五", stuclass: "移动互联"),
    Student(stuno: "45678", stuname: "赵六", stuclass: "物联网"),
    Student(stuno: "56789", stuname: "钱七", stuclass: "移动互联"),
    Student(stuno: "67890", stuname: "孙八", stuclass: "移动互联")
]

// 返回类型RangeSet
let filterStudents = students.indices { student in
    student.stuclass == "移动互联"
}
// 遍历RangeSet
for student in students[filterStudents] {
    print(student)
}

类型化throws

throws时可以指定类型,异常处理时可以更加精细准确。

代码语言:javascript复制
enum FileReadError: Error {
    case FileISNull
    case FileNotFound
}

// 抛出异常,指定异常类型
func readFileContent(filePath: String) throws (FileReadError) -> String {
    if filePath == "" {
        // 此处只能抛出FileReadError,而不能是别的Error类型
        throw .FileISNull
    }
    if filePath != "/User/Desktop/123.txt" {
        throw .FileNotFound
    }
    return "123"
}

do {
    let result = try readFileContent(filePath: "abc")
} catch {
    // 处理异常,更加精细准确
    switch error {
    case .FileISNull:
        print(error)
    case .FileNotFound:
        fatalError(error.localizedDescription)
    }
}

import支持访问权限

代码语言:javascript复制
// 不支持open
public import Foundation
internal import UIKit
fileprivate import SwiftUI
private import Combine

count(where:)

相当于filter() count的组合操作。

代码语言:javascript复制
let array = ["Animal", "Baby", "Apple", "Google", "Aunt"]
// filter() count
array
    .filter { str in
        str.hasPrefix("A")
    }
    .count // 3

// count(where:)
array
    .count(where: { str in // 3
        str.hasPrefix("A")
    })

并发编程

  1. 默认启用完全并发。
  2. 确保了全局变量的并发安全性。
  3. 消除了 Swift 5.10 中误报数据竞争的警告。

0 人点赞