更新部分内容到 Swift 5.7 (#1200)
* 更新内容到 Swift 5.7 * 更新内容到 Swift 5.7 * 更新内容到 Swift 5.7 * update to Swift version 5.7 * 更新内容到 Swift 5.7 * 更新内容到 Swift 5.7 * 修正部分术语 * 更新内容到 Swift 5.7 * 更新内容到 Swift 5.7 * 标题格式修改 * 修改了部分用词 * 修改了代码块格式 * 修改了代码段及行内代码格式 * 修改了代码段及行内代码样式 * 按照排版要求重新修改了部分格式 * Delete 02_Lexical_Structure.md * Delete 03_Types.md * Delete 04_Expressions.md * Delete 05_Statements.md * Delete 07_Attributes.md * Delete 10_Summary_of_the_Grammar.md * 根据排版指南修改了部分格式 * 根据排版指南修改了部分格式 * Update source/03_language_reference/02_Lexical_Structure.md Co-authored-by: Jie Liang <lj925184928@gmail.com>
This commit is contained in:
@ -1,13 +1,13 @@
|
||||
# 版本兼容性
|
||||
|
||||
本书描述的是在 Xcode 13 中默认包含的 Swift 5.5 版本。你可以使用 Xcode 13 来构建 Swift 5.5、Swift 4.2 或 Swift 4 写的项目。
|
||||
本书描述的是在 Xcode 14 中默认包含的 Swift 5.7 版本。你可以使用 Xcode 14 来构建 Swift 5.7、Swift 4.2 或 Swift 4 写的项目。
|
||||
|
||||
使用 Xcode 13 构建 Swift 4 和 Swift 4.2 代码时,Swift 5.5 的大多数功能都适用。但以下功能仅支持 Swift 5.5 或更高版本:
|
||||
使用 Xcode 14 构建 Swift 4 和 Swift 4.2 代码时,Swift 5.7 的大多数功能都适用。但以下功能仅支持 Swift 5.7 或更高版本:
|
||||
|
||||
* 返回值是不透明类型的函数依赖 Swift 5.1 运行时。
|
||||
* **try?** 表达式不会为已返回可选类型的代码引入额外的可选类型层级。
|
||||
* 大数字的整型字面量初始化代码的类型将会被正确推导,例如 **UInt64(0xffff_ffff_ffff_ffff)** 将会被推导为整型类型而非溢出。
|
||||
|
||||
并发特性需要 Swift 5.5 及以上版本,以及一个提供了并发相关类型的 Swift 标准库版本。要应用于苹果平台,请至少将部署版本设置为 iOS 15、macOS 12、tvOS 15 或 watchOS 8.0。
|
||||
并发特性需要 Swift 5.7 及以上版本,以及一个提供了并发相关类型的 Swift 标准库版本。要应用于苹果平台,请至少将部署版本设置为 iOS 15、macOS 12、tvOS 15 或 watchOS 8.0。
|
||||
|
||||
用 Swift 5.5 写的项目可以依赖用 Swift 4.2 或 Swift 4 写的项目,反之亦然。这意味着,如果你将一个大的项目分解成多个框架(framework),你可以逐个地将框架从 Swift 4 代码迁移到 Swift 5.5。
|
||||
用 Swift 5.7 写的项目可以依赖用 Swift 4.2 或 Swift 4 写的项目,反之亦然。这意味着,如果你将一个大的项目分解成多个框架(framework),你可以逐个地将框架从 Swift 4 代码迁移到 Swift 5.7。
|
||||
|
||||
@ -154,6 +154,14 @@ let fullName: String = "John Appleseed"
|
||||
let informalGreeting = "Hi \(nickName ?? fullName)"
|
||||
```
|
||||
|
||||
你还可以使用较短的代码解包一个值,并且对该被包装值使用相同的名称。
|
||||
|
||||
```swift
|
||||
if let nickname {
|
||||
print("Hey, \(nickName)")
|
||||
}
|
||||
```
|
||||
|
||||
`switch` 支持任意类型的数据以及各种比较操作——不仅仅是整数以及测试相等。
|
||||
|
||||
```swift
|
||||
@ -613,6 +621,51 @@ let threeOfSpadesDescription = threeOfSpades.simpleDescription()
|
||||
>
|
||||
> 写一个方法,创建一副完整的扑克牌,这些牌是所有 rank 和 suit 的组合。
|
||||
|
||||
## 并发性 {#concurrency}
|
||||
|
||||
使用 `async` 标记异步运行的函数
|
||||
|
||||
```swift
|
||||
func fetchUserID(from server: String) async -> Int{
|
||||
if server == "primary"
|
||||
return 97
|
||||
}
|
||||
return 501
|
||||
```
|
||||
|
||||
您还可以通过在函数名前添加 `await` 来标记对异步函数的调用
|
||||
|
||||
```swift
|
||||
func fetchUsername(from server:String) async -> String{
|
||||
let userID = await fetchUserID(from: server)
|
||||
if userID == 501{
|
||||
return "John Appleseed"
|
||||
}
|
||||
return "Guest"
|
||||
}
|
||||
```
|
||||
|
||||
使用 `async let` 来调用异步函数,并让其与其它异步函数并行运行。
|
||||
使用 `await` 以使用该异步函数返回的值。
|
||||
|
||||
```swift
|
||||
func connectUser(to server: String) async{
|
||||
async let userID = fetchUserID(from: server)
|
||||
async let username = fetchUsername(from: server)
|
||||
let greeting = await "Hello \(username), user ID \(userID)"
|
||||
print(greeting)
|
||||
}
|
||||
```
|
||||
|
||||
使用 `Task` 从同步代码中调用异步函数且不等待它们返回结果
|
||||
|
||||
```swift
|
||||
Task {
|
||||
await connectUser(to: "primary")
|
||||
}
|
||||
//Prints "Hello Guest, user ID 97"
|
||||
```
|
||||
|
||||
## 协议和扩展 {#protocols-and-extensions}
|
||||
|
||||
使用 `protocol` 来声明一个协议。
|
||||
|
||||
Reference in New Issue
Block a user