Swift 进阶【三】可选值
Swift 中可选值的定义如下
1 | enum Optional<Wrapped> { |
因为 Optional
是枚举类型,所以有的时候可以用模式匹配来进行一些巧妙的操作:
- 使用 if case 来进行模式匹配,对非 nil 的值做 for 循环
1 | let ary = [1, 2, nil, 4, nil, 44] |
Swift 中可选值的定义如下
1 | enum Optional<Wrapped> { |
因为 Optional
是枚举类型,所以有的时候可以用模式匹配来进行一些巧妙的操作:
1 | let ary = [1, 2, nil, 4, nil, 44] |
Sequence定义:
1 | protocol Sequence { |
要实现一个Sequence,首先需要提供一个返回迭代器(iterator)的makeIterator()
方法。
对于迭代器,它是一个满足 IteratorProtocol
协议的类型。
IteratorProtocol协议的定义:
1 | protocol IteratorProtocol { |
在Swift中,数组是值类型。并且Swift中,Swift标准库中的所有集合类型都使用了“写时复制”这一技术,避免了大量副本导致性能下降。值类型的好处,不仅是性能有提高,其次就是能保证数组的不可变。
在Objective-C中,声明一个不可变的数组 NSArray
并不能保证数组的不可变。例如:
1 | let mutableAry = NSMutableArray(array: [1, 2, 3]) |
正确的做法是,在赋值的时候,先进行拷贝:
1 | let nsAry = mutableAry.copy() as! NSArray |
之前我一直以为,Swift是一门弱类型的语言。
判断依据:
Swift 变量不强制的指定类型,而是用
var
和let
表示可变与不可变。所以,Swift是一门弱类型的语言。
但是,看了一下强弱类型的时候,才恍然大悟。其实 var
和 let
的特性,只是说明Swift是一门动态类型的语言。并不能指出是否是强或弱类型。
一些定义:
打开浏览器,输入 http://192.168.1.1
,进入光猫管理页面,用 useradmin
账户登陆。将地址栏中的连接 http://192.168.1.1/cgi-bin/content.asp
改为 http://192.168.1.1/cgi-bin/telnet.asp
。出来如下的界面:
启用 Telnet
,点击确定。
打开 Mac 终端,输入命令
1 | telnet 192.168.1.1 |
按住 control + s
键,保存终端内容到文件。
文件中搜索 telecomadmin
,就能看到超级密码了。
file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数:
1 |
|
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。
简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py
文件, 该文件的内容可以为空。__int__.py
用于标识当前文件夹是一个包。
考虑一个在 package_runoob
目录下的 runoob1.py
、runoob2.py
、__init__.py
文件,test.py
为测试调用包的代码,目录结构如下:
1 | test.py |
package_runoob/runoob1.py
1 | #!/usr/bin/python |
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
模块让你能够有逻辑地组织你的 Python 代码段。
把相关的代码分配到一个模块里能让你的代码更好用,更易懂。
模块能定义函数,类和变量,模块里也能包含可执行的代码。
模块的引入
模块定义好后,我们可以使用 import 语句来引入模块,语法如下:
1 | import module1[, module2[,... moduleN] |
比如要引用模块 math,就可以在文件最开始的地方用 import math 来引入。在调用 math 模块中的函数时,必须这样引用:
1 | 模块名.函数名 |
我们在进行 SSH 登陆的时候,每次都需要输入密码,就感到十分的不方便,这里可以利用 SSH Key(ssh公钥) 来验证登录,从而实现免密登陆。
生成 SSH Key 我们需要 ssh-keygen
命令
1 | ssh-keygen -t rsa -C "xxxxx@xxxxx.com" |
查看生成的 SSH Key
1 | cat ~/.ssh/id_rsa.pub |