Swift notes 1 (常量、变量、可选变量)

Swift是苹果在WWDC 2014推出的用于开发iOS、OS X、watchOS软件的新语言,集众家之长,易用、安全、强大。

去年开始接触iOS的时候,Swift还并不稳定;如今一年多过去,已经更新到2.1版了。最近想系统得再学习一下iOS开发,就先从Swift开始了。

资料主要在看喵神(@onevcat)领队翻译的官方文档,通过极客学院可以在线查看,也可以下载equb使用iBooks看。(手机上使用iBooks看这个略卡)

总体来说对Swift语法的感受就是“物尽其用,简约不简单”,使用Swift可以尽量使得代码里的每个关键词都有必要的含义,比如去除switch-case语句的break;省略语句后面的分号,省略if语句条件的括号等等。这种特性会使得代码很简洁(写上也不会错),不过也会导致代码可读性降低,有利有弊。多人开发的话还是要统一书写格式。

这一系列博客会伴随我学习的过程,记录一些比较大的新特性和变化之类,作为分享和笔记。

变量&常量

使用var声明常量,使用let声明变量。如:

let foo = 123
var bar = 123
Swift和OC一样是类型安全的语言,但是在声明变量和常量的时候一般不需要特别指定类型(变量需要同样赋初始值)。Swift会通过对初始值进行“**类型推断**”来确定常量/变量的类型;如果对变量没有初始值,就需要在声明的时候显式注明变量类型,语法为在变量后跟一个冒号,再跟类型:
var bar:Int
var = 123

可选变量

在用Java写Android(App)的时候,最头痛的就是空指针,动不动NullPointException,以至于只要崩溃第一反应就是空指针……囧……

Swift的可选变量对空指针的处理异常优雅,而且通过语法糖进行声明、封包、拆包也很是简洁。

1
2
3
4
5
6
7
8
9
10
11
var possibleStr:String?

possibleStr = "optional"
print("I'm sure possibleStr is not nil and it's length is \(possibleStr?.characters.count).");
print("I'm sure possibleStr is not nil and it's length is \(possibleStr!.characters.count).");

if let str = possibleStr {
print("\(str) is not nil.")
} else {
print("\(str) is nil!!!")
}

问号表示声明的这个变量是可选变量,初始值为nil。Swift中的nil和OC中的nil并不一样,OC中的nil表示指针不指向任何对象,所以像nil发送任何消息都是无意义的。Swift中的nil表示这个变量没有任何值,使用nil会导致程序崩溃。

通过if let 语句判断possibleStr变量是否包含值,如果有,将值赋给str常量,在{}中可以使用这个常量。如果在{}中还想操作这个值,可以使用if var声明一个局部变量。

对于不想处理nil情况,也可以使用在变量后面附加问号或者感叹号的方式操作可选变量。

问号(?)表示如果变量不为空,则执行后面的代码;否则,不执行后面的代码,表达式的值为nil

感叹号(!)表示确信变量不为nil,所以不做编译时nil检查,如果此时变量为nil,会出现运行时异常。

如果不希望每次使用变量都加上!或者?,可以在声明的时候将?替换成!,这样表示“声明一个可选变量,但是我确信这个变量在使用前一定会初始化”。这种用法常用在声明类的属性,这些属性在对象初始化时一定会赋初值。