今日份毒鸡汤,我干了,你随意~~~
偶尔的发泄很有必要。毕竟弦绷得太紧,也需要适当放松。当痛苦让你快承受不住时,放声大哭也没什么不可以。只是请记得,不要在悲伤的情绪里沉溺太久,也不要在崩溃的边缘停留太久。那些让你痛苦焦虑的事情,或许实际上并没有你想象的那么严重,很多情况下只是自己吓唬自己罢了。所以,你要做的不是接下来立刻赢,而是现在不能输。终有一天,那些你受过的苦,吃过的亏,担的责,忍的痛,都会变成光,照亮前行的路。虽然目前还是单身,虽然仍在大城市拼搏,虽然时常被家人催婚,虽然偶尔也会崩溃。虽然自己拼命往上爬的样子一点都不优雅,还有些笨拙,甚至因此拉高了老板的期待值而受到同事们的讨厌和排挤。但,那又怎么样呢?
之前整理Kotlin相关文章的时候,其实搜过几篇Swift与Objective-C的对比(虽然那会儿的初衷只是为了引出Kotlin与Java的对比),结果后来也是不了了之了……
通常来说,编程语言教程中的第一个程序应该就是在屏幕上打印“Hello,world”。在swift中,也可以用一行代码实现:
print("Hello, world!")
上面的代码就是一个完整的程序了,不需要为了输入输出或者字符串处理导入单独的库。全局作用域中的代码会被自动当做程序的入口点,所以也不需要main()函数,同样不需要在每个语句结尾写上分号。
注意:最好的体验是把这里面涉及到的内容作为Playground文件在Xcode中打开。Playgrounds可以编辑代码并立刻看到输出结果。(我一定是瞎了,当时没有看到这句话,还特意问了一遍……自闭了)
说明:由于我的笔记本是XPS不是MAC,所以只能网上找一个Swift在线工具编辑
这篇文章只是最初级的介绍,会通过一系列编程示例让大家对Swift有初步的了解,如果有什么不理解的地方也不用担心(因为我也是初来乍到、人生地不熟的小白痴一枚),或许以后会再出几篇类似的文章来详细讲解这里面介绍过的内容。
简单值
使用let来声明常量,使用var来声明变量。
一个常量的值,在编译的时候,并不需要有明确的值,但是只能为它赋值一次。也就是说,可以用常量来命名一个值,一次赋值就可以在多个地方使用。
那如果就想修改myConstant的值怎么办呢?我们先试试直接修改:
好吧,报错了,报错信息说的很清楚,意思就是不能为myConstant赋值,因为它是let常量,但是将let改为var就可以改变它的值了,还友好地指出了在哪里改,也是优秀了。
那接下来我们按照提示中的内容修改一下看看是否符合预期:
果然,搞定啦~这就是接下来要演示的变量。被var声明的变量值是可以被修改和反复赋值的。
常量或变量的类型必须和赋给它们的值一致。但是,有时候也不用明确地去声明类型,编译器就会根据声明的变量或常量来自动推断它们的类型。比如上面的示例中,编译器就推断出myConstant是个字符串类型,因为它的初始值是个字符串。
如果初始值没有提供足够的信息或者没有初始值的情况下,就必须在变量后面声明类型,用冒号分隔。
如图,如果直接声明一个变量,编译器没办法推断出它的类型,就会报类型缺失的错误。在变量名后面加上类型即可。
var myConstant: String
也可以在声明类型的同时进行赋值。
备注:在Swift中,值永远也不会被隐式转换为其他类型,如果需要把一个值转换成其他类型,一定要使用显式转换。
如图,将字符串和整型进行运算就会报错,执行结果的第一行就会指出在第5行第24个字符处出现错误,运算符"+"不能应用于"String"和"Int"类型的操作数。考虑到程序的预期结果,所以只需要将常量width进行显示转换为字符串就可以啦~
还有一种更简单的把值转换成字符串的方法:把值写到括号中,并且在括号前面写一个反斜杠"\"。如图:
注意:这种方式只能在字符串内部进行转换,也就是字符串插值只能出现在字符串文本中。以下两种示例都是错误的:
改为在字符串内部进行值转换就可以啦~
使用三个双引号(""")来包含多行字符串内容,每行行首的缩进会被去除,直到和结尾引号的缩进相匹配。如:
使用方括号[]来创建数组和字典,可使用下标或键(key)来访问元素。最后一个元素后面允许有逗号(可能是为了方便加新值)。
首先来看数组(乍一看和Python的列表有点像,实际上不完全一样),赋值以及类型声明和上面类似,可通过下标对数组中的值进行更改:
但是如果使用let来声明数组,数组就是不可变的了:
接下来我们再看字典,也是key-value形式的(注意:并不是Python中大括号{}哦),可通过键值对字典内的元素进行添加或修改:
代码3-6行定义了一个字典,第7行往字典中添加了新值,第8行对字典中原有的值进行了修改(如果key不存在,则添加新值;如果存在,则修改key对应的值),下图是将此修改进行注释,运行后的结果如下图:
同样的,数组中也可以添加元素,通过使用append()函数即可:
使用初始化语法可以用来创建一个空数组或空字典:
也可以通过上面介绍变量、常量中的类型声明方式:
如果类型信息是可以被推断出来,可以直接用[]和[:]来创建空数组和空字典——比如,在给变量赋新值或者给函数传参数的时候。
shoppingList = []occupations = [:]
在遍历数组的时候,如果同时需要每个数据项的值和索引值,可以使用String的enumerate()方法来进行数组的遍历,如图:
如果只是想遍历数组中的数据项,可以直接使用for循环即可(类似于Python中的遍历列表):
字典中如果要移除某个值,可以使用removeValueForKey()方法来移除字典的key-value键值对,也可通过直接指定键的值为nil来移除key-value键值对。
备注:有警告,先忽略,主要看结果~如果字典中的键对应的值被移除了,就会展示为nil,和空不一样。
遍历字典和上面说的遍历带有索引值的列表一样,如图:
备注:代码6-9行中index取的是字典中的各索引,从0开始;item取的是字典中的键对值,格式为:(key:XX,value:XX)。代码11-14行则是直接取出字典中的key和value值。
先酱~~~