Swift 发布十周年之际 Apple 推出了大版本 Swift 6.0,其内置于 Xcode 16,带来了如下的新特性。
Int128与UInt128
增加 128 位整数类型Int128
与UInt128
。
// Int128
var a: Int128 = 10
// UInt128
let b: UInt128 = 20
集合
增加了RangeSet
类型,用于处理对集合执行复杂操作之后的结果。
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
时可以指定类型,异常处理时可以更加精细准确。
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
的组合操作。
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")
})
并发编程
- 默认启用完全并发。
- 确保了全局变量的并发安全性。
- 消除了 Swift 5.10 中误报数据竞争的警告。