事实上,结构体 & 类 我们并不是很陌生,在我们各种熟悉语言中均是存在,比如,C、C++、OC等。
前面我们已经知道 Swift 将 枚举 着实丰富了很多,具体可以参见这篇文章。
而对于 结构体 , Swift 也是对其宠爱有加。
有句话是这么说的来着:Swift 中,能用 结构体 就不要用 类 ,除非需要 类 的那些特有的特性。
那么, Swift 中怎么定义 结构体 跟 类 呢?
Road endless its long and far, I will seek up and down.
事实上,结构体 & 类 我们并不是很陌生,在我们各种熟悉语言中均是存在,比如,C、C++、OC等。
前面我们已经知道 Swift 将 枚举 着实丰富了很多,具体可以参见这篇文章。
而对于 结构体 , Swift 也是对其宠爱有加。
有句话是这么说的来着:Swift 中,能用 结构体 就不要用 类 ,除非需要 类 的那些特有的特性。
那么, Swift 中怎么定义 结构体 跟 类 呢?
通常来说,枚举是为一组有限种可能性的相关值提供的通用类型。
在 C/C++/Objective C
中,这种 通用集合 被限定为一组整型常数。
而 Swift
却将它真正的发扬了光大,灵活且强大:
官方提供的高阶函数,不仅可以大大的简化我们的代码,而且一般来讲会比传统(我们自己实现)的实现更好更快。PS:可能是我自己能力不足,哈哈~
可能有过这样的苦恼:费劲巴拉的终于实现了,猛然发现官方原本提供了现成的方法,而且比自己实现的更好。
内心仿佛一万只草泥马飘过。。。
总之,你用或者不用,它们就在那里!
今天主要介绍一下 swift
提供的几个高阶函数 —— map & flatMap & filter & reduce 。
前面有说到,在 swift 2.0 引入了 guard
关键字,可以让代码编写更流畅。它的优雅简洁而功能强大确实给了我们极大的方便。具体可以参见 这里 。
而,跟 guard
一同引入的还有一个关键字 —— defer
。
一句话总结 defer
就是:让执行推迟。
通常我们在代码编写过程中,为了更好的理解,亦或是为了其他的目的,而希望可以通过简单的方式,迅速的完成标记。
在我们熟悉的 OC
中我们有两种标记方式:
其中一种是 #pragram mark - xxx
方式。
swift 神奇的引入了一个类型——可选类型(optionals)。
但是,我们要是按照以往(比如OC)的套路在使用可选类型定义的常量的时候,又会让你崩溃抓狂。
因为 swift 是类型安全的语言,所以可选类型的常量在 if
判断之后仍然需要 解包(!
) 。如下:
|
|
倘若,你不加上 !
,根本就不会让你编译通过,而,加上呢?又会如此的麻烦。难道优雅的 swift 就没有解决办法吗?
在 Swift 语言中,访问修饰符有五种,分别为 private,fileprivate,internal,public 和 open。
其中 fileprivate 和 open 是 Swift 3 新添加的。由于过去 Swift 对于访问权限的控制,不是基于类的,而是基于文件的。这样会有问题,所以 Swift 3 新增了两个修饰符对原来的 private、public 进行细分。
这里整理总结下 as、as!、as? 这三种类型转换操作符的异同,以及各自的使用场景。
|
|
|
|
-A num, --after-context=num
- 打印出找到的匹配行后num行。这个跟-B,-C类似功能,主要用于查看上下文。
-B num, --before-context=num
- 打印出找到的匹配行前num行。
-C[num, --context=num]
- 打印出找到的匹配行前后num行,相当于-A num -B num。
当项目过大时,git clone
会出现超时失败,这时候我们可以只拉去最新的一次或者几次commit
:
|
|
有时候,我们总是图一时之快,而忽略了其他的问题。