原文链接
www.donnywals.com/whats-new-i…
翻译总结
1. TaskGroup 的改进
-
新特性: Swift 6.1 中,
TaskGroup
的返回类型可以自动推断,无需显式指定。 -
示例 1: 自动推断返回类型
await withTaskGroup { group in for _ in 1...10 { group.addTask { return Int.random(in: 1...10) // 编译器推断返回类型为 Int } } }
-
示例 2: 返回类型不一致会报错
await withTaskGroup { group in group.addTask { return Int.random(in: 1...10) // 返回 Int } group.addTask { return "Hello, world" // 返回 String,编译器报错 } }
-
示例 3: 使用枚举支持多返回类型
enum TaskResult { case number(Int) case text(String) } await withTaskGroup(of: TaskResult.self) { group in group.addTask { return .number(Int.random(in: 1...10)) } group.addTask { return .text("Hello, world") } }
2. 导入成员可见性改进
-
新特性: Swift 6.1 引入了新的成员可见性模式,允许开发者控制导入模块的扩展可见性。
-
示例 1: 不同模块中的同名扩展
// CurrencyKit 模块 extension Int { func price() -> String { return "$(self)" } } // PurchaseParser 模块 extension Int { func price() -> Double { return Double(self) / 100.0 } } // 主模块 import CurrencyKit import PurchaseParser let amount = 1000 let priceString: String = amount.price() // 明确指定返回类型,避免歧义
-
示例 2: 启用
MemberImportVisibility
特性// Swift Package 配置 .executableTarget( name: "AppTarget", dependencies: [ "CurrencyKit", "PurchaseParser" ], swiftSettings: [ .enableExperimentalFeature("MemberImportVisibility") ] ) // 主模块 import CurrencyKit let amount = 1000 let priceString = amount.price() // 只能使用 CurrencyKit 中的扩展
-
示例 3: 未启用特性时的行为
import CurrencyKit let amount = 1000 let priceString = amount.price() // 如果未启用 MemberImportVisibility,可能误用 PurchaseParser 的扩展
总结
Swift 6.1 的主要改进包括:
- TaskGroup 的自动类型推断:简化了并发代码的编写。
- 导入成员可见性控制:通过
MemberImportVisibility
特性,避免不同模块中同名扩展的冲突,提升代码的可维护性。
这些改进虽然看似小,但在实际开发中能显著提升开发效率和代码质量