Swift编程:Optionals与Dictionaries详解
立即解锁
发布时间: 2025-09-12 01:52:35 阅读量: 8 订阅数: 27 AIGC 

### Swift 编程:Optionals 与 Dictionaries 详解
#### 1. Optionals 与空合并运算符
在处理 Optionals 时,常见的操作是获取值(如果 Optional 包含值),或者在 Optional 为 nil 时使用默认值。例如,从 `errorDescription` 中提取错误信息时,如果字符串不包含错误,你可能希望默认显示 “No error.”。这可以通过可选绑定来实现:
```swift
let description: String
if let errorDescription = errorDescription {
description = errorDescription
} else {
description = "No error."
}
```
虽然这种技术可行,但对于一个简单的操作来说,需要编写大量代码。可以使用空合并运算符 `??` 来解决这个问题:
```swift
let description = errorDescription ?? "No error."
```
`??` 运算符的左侧必须是一个 Optional,右侧必须是 Optional 所包含类型的值。如果左侧的 Optional 为 nil,`??` 返回右侧的值;如果 Optional 不为 nil,`??` 返回 Optional 中包含的值。
#### 2. Optionals 是否使用的判断
Optionals 最适合用于可能为 nil 的情况,用于表示某物的完全缺失。但不存在并不等同于零。例如,在编写代码来模拟银行账户时,如果用户在某个账户中没有余额,值 0 比 nil 更合适,因为用户并不缺少账户,只是缺少钱。以下是一些示例,选择最适合的类型:
- 一个人的年龄:`Int` 或 `Int?`
- 一个人的中间名:`String` 或 `String?`
- 一个人的孩子的名字:`[String]` 或 `[String]?` 或 `[String?]`
#### 3. 关于 Optionals 的挑战
- **青铜挑战**:思考上述示例中最适合的类型。
- **白银挑战**:通过在 Optional 为 nil 时强制解包,制造一个运行时错误,然后检查错误并理解错误信息。
- **黄金挑战**:打开之前的 `Arrays.playground`,查找数组中 “Go on an Arctic expedition” 的索引,解包该值并计算数组中两个位置后的索引,最后使用新索引查找该位置的字符串。查看 `String` 和 `Array` 类型的文档,了解还有哪些属性和方法与 Optionals 一起使用以及原因。
#### 4. 字典的基本概念
数组类型在集合中元素的顺序很重要时很有用,但有时顺序并不重要,只需要在容器中保存一组信息并按需检索,这就是字典的用途。字典是一种通过键值对组织内容的集合类型,字典中的键映射到值。字典的键必须是唯一的,这确保每个键都能唯一地映射到其值。
#### 5. 创建字典
创建 Swift 字典的一般语法是 `var dict: Dictionary<Key, Value>`,也可以使用字典字面量语法 `[:]`。例如:
```swift
var dict1: Dictionary<String, Int>
var dict2: [String:Int]
```
还可以在一行中声明和初始化字典,显式声明键和值的类型或利用类型推断:
```swift
var companyZIPCode: [String:Int] = ["Big Nerd Ranch": 30307]
var sameCompanyZIPCode = ["Big Nerd Ranch": 30307]
```
以下是创建一个存储电影评分的字典示例:
```swift
import Cocoa
var movieRatings = ["Tron": 4, "WarGames": 5, "Sneakers": 4]
```
#### 6. 访问和修改字典值
- **使用 count 属性**:可以使用 `count` 属性获取字典的键值对数量。
```swift
movieRatings.count
```
- **读取值**:通过键来访问字典中的值,使用下标语法。
```swift
let tronRating = movieRatings["Tron"]
```
需要注意的是,当对字典实例进行下标操作时,字典会返回一个与字典值类型匹配的 Optional,因为字典需要一种方式告诉你请求的值不存在。
- **修改值*
0
0
复制全文
相关推荐









