fix all anchor format
This commit is contained in:
@ -13,10 +13,10 @@
|
||||
|
||||
可选类型是 Swift 中新引入的,功能很强大。在这篇博文里讨论的,是在 Swift 里,如何通过可选类型来保证强类型的安全性。作为例子,我们来创建一个 Objective-C API 的 Swift 版本,但实际上 Swift 本身并不需要这样的 API。
|
||||
|
||||
<a name="#add-function"></a>
|
||||
#### 为 Dictionary 增加 objectsForKeys 函数
|
||||
#### 为 Dictionary 增加 objectsForKeys 函数 {#add-function}
|
||||
|
||||
在 Objective-C 中,`NSDictionary` 有一个方法 `-objectsForKeys:NoFoundMarker:`, 这个方法需要一个 `NSArray` 数组作为键值参数,然后返回一个包含相关值的数组。文档里写到:“返回数组中的第 N 个值,和输入数组中的第 N 个值相对应”,那如果有某个键值在字典里不存在呢?于是就有了 `notFoundMarker` 作为返回提示。比如第三个键值没有找到,那么在返回数组中第三个值就是这个 `notFoundMarker`,而不是字典中的第三个值,但是这个值只是用来提醒原字典中没有找到对应值,但在返回数组中该元素存在,且用 `notFoundMarker` 作为占位符,因为这个对象不能直接使用,所以在 Foundation 框架中有个专门的类处理这个情况:`NSNull`。
|
||||
在 Objective-C 中,`NSDictionary` 有一个方法 `-objectsForKeys:NoFoundMarker:`, 这个方法需要一个 `NSArray` 数组作为键值参数,然后返回一个包含相关值的数组。文档里写到:“返回数组中的第 N 个值,
|
||||
和输入数组中的第 N 个值相对应”,那如果有某个键值在字典里不存在呢?于是就有了 `notFoundMarker` 作为返回提示。比如第三个键值没有找到,那么在返回数组中第三个值就是这个 `notFoundMarker`,而不是字典中的第三个值,但是这个值只是用来提醒原字典中没有找到对应值,但在返回数组中该元素存在,且用 `notFoundMarker` 作为占位符,因为这个对象不能直接使用,所以在 Foundation 框架中有个专门的类处理这个情况:`NSNull`。
|
||||
|
||||
在 Swift 中,`Dictionary` 类没有类似 `objectsForKeys` 的函数,为了说明问题,我们动手加一个,并且使其成为操作字典值的通用方法。我们可以用 `extension` 来实现:
|
||||
|
||||
@ -43,8 +43,7 @@ extension Dictionary{
|
||||
}
|
||||
```
|
||||
|
||||
<a name="#easy-function"></a>
|
||||
#### Swift 中更简便的方法
|
||||
#### Swift 中更简便的方法 {#easy-function}
|
||||
|
||||
小伙伴们可能会问,为什么 Swift 中不需要实现这么一个 API 呢?其实其有更简单的实现,如下面代码所示:
|
||||
|
||||
@ -73,8 +72,7 @@ t = dic.valuesForKeys([])
|
||||
//结果为:[]
|
||||
```
|
||||
|
||||
<a name="#nested-optional"></a>
|
||||
#### 内嵌可选类型
|
||||
#### 内嵌可选类型 {#nested-optional}
|
||||
|
||||
现在,如果我们为每一个结果调用 `last` 方法,看下结果如何?
|
||||
|
||||
@ -114,8 +112,7 @@ var last:T? { get }
|
||||
|
||||
不管是 Swift 版本还是 Objective-C 版本,返回值为 `nil` 都意味数组是空的,所以它就没有最后一个元素。 但是如果返回是 `Optional(nil)` 或者 Objective-C 中的 `NSNull` 都表示数组中的最后一个元素存在,但是元素的内容是空的。在 Objective-C 中只能借助 `NSNull` 作为占位符来达到这个目的,但是 Swift 却可以语言系统类型的角度的实现。
|
||||
|
||||
<a name="#provide-default"></a>
|
||||
#### 提供一个默认值
|
||||
#### 提供一个默认值 {#provide-default}
|
||||
|
||||
进一步封装,如果我字典中的某个或某些元素不存在,我们想提供一个默认值怎么办呢?实现方法很简单:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user