介绍当前提议主要是讲苹果在 Swift5.7 支持不透明结果类型的结构化表达,目前在 Swift5.7 已经实现。不透明结果类型可以用作函数的结果类型,变量的类型和下标元素的结果类型。
总结通过当前提议 SE-0341,你应当知道:Swift5.7 通过运用 some 到泛型参数类型,是为了去除泛型模块声明的冗余表达;some 对应的是与之等价的泛型模版表达式;内部通过类型推断,确定真实的不透明参数类型所对应的类型
介绍SE-0361,在 Swift5.7 已经实现。目前指定泛型的类型参数基本都是通过<>来表示,例如Array<String>。 { ... } // Extends Optional<String>总结Swift5.7 泛型类型支持带尖括号的扩展绑定至此,包括 extension, Swift 均支持带<>扩展语法
= "zhangsan" print(name) // Optional("zhangsan") // Swift5.7之前 // if let if let name = name { print (name) // zhangsan } // Swift5.7之后 // if let if let name { print(name) // zhangsan } func method { // Swift5.7之前 // guard let guard let name = name else { return } // Swift5.7之后 guard let age = age else { return } } 增强的闭包类型推断 let array: [String] = ["1", "2", "3", "4", "5"] // Swift5.7 0 } print(newArray1) // [1, 2, 3, 4, 5] // Swift5.7之后 let newArray2 = array.map { str in Int(str
.") // Swift5.7之后,Swift5.9之前 try await Task.sleep(until: .now + .seconds(1), clock: .suspending continue task...") } // 异步函数 func doSomeAsyncWork() async throws { print("start to work...") // Swift5.7
介绍SE-0358, Swift5.7 已实现。SE-0346 已经引入了主要关联类型特性。本篇提议目的是为了在 Swift 标准库中使用此特性,为现有协议支持主要关联类型。 Swift5.7中的新协议Clock只有Instant一个关联类型。在实际使用中,开发者更多使用的类型是Instant.Duration而不是Instant类型本身。
对Swift中some和any关键字的理解 在最新Swift版本中(Xcode14,Swift5.7),如果协议中有使用泛型,则如果要将此协议作为参数类型,必须使用any关键字进行修饰。
Swift5.7 中提议的解决方案:如果我们删除解包中右边的表达式,让编译器来自动隐藏当前的变量,只保留左边的变量名,这时这些可选绑定表达会更加简洁,而且可读性更强。
如果你正在实现开发一个语法高亮库,并且定义一个函数readSyntaxHighlightedLines读取高亮语法的行数, 这个函数使用SyntaxTokenSequence来包装返回结果,结果中的元素类型是[Token], 代表每一行中语法高亮的 token 数组。例如:
自 SE-0244 引入以来,不透明的结果类型已成为类型级抽象的强大工具,允许库作者隐藏其API的实现细节。