最近开始学习swift,把学习的过程和总结整理成一个系列,方便日后回顾总结。
基本语法
基础语法
swift中每一行结束后不需要加分号,多个语句在同一行内需要用分好隔开
//表示注释,或者用/* ……*/
常量
常量是指定义之后无法修改值的量,比如设置一个最大尝试登陆的次数,它的值一旦被确定,就不应该在程序中被修改。swift中的常量用let表示,定义方法如下:
let maxAttemptTime = 3 //正确
maxAttemptTime = 4 //错误,常量一旦定义不可以改变
let maxAttemptTime //错误
另外要注意的是,常量在定义的时候必须要赋初值,当然也可以不这么做,后面会详细介绍。
变量
和常量类不同的是,变量用var表示,可以随意改变值
var currentAttemptTime = 1 //正确
currentAttemptTime = currentAttemptTime + 1 //正确
打印常量和变量
OC中的NSLog方法依然可用,也可以用swift的println()方法。
NSLog("hello world")
println("hello world")
//以上两句等价,输出结果都是"hello world"
//也可以打印变量或者常量
var name = "kt"
NSLog("name = \(name)")
println("name = \(name)")
//以上两句等价,输出结果都是"name = kt"
swift也支持print方法,与println不同的是,println在结尾会自动加上换行符,这与java的语法是一致的。
类型
类型推导
习惯了oc、c++或者java的程序猿会觉得没有变量的类型很奇怪,其实swift和php与js类似,都是支持类型推导功能的。
所谓的类型推导,就是说swift会根据变量的实际值,自动推导出变量所属的类型。
swift中的基础类型有Int、Double、String、UInt8、Character、Bool等。就不一一解释了。Swift中所有的类型都是首字母大写的。
var name = "kt" //自动推导为String类型
var age = 20 //自动推导为Int类型
var pi = 3.1415926 //自动推导为Double类型
宽类型有限
既然swift支持类型推导,那么π的近似值3.1415926,会被推导为什么类型呢?是Float还是Double? 答案是Double,因为swift具有宽类型优先的特性,也就是为自动推导为取值范围更宽泛的类型。
类型标注
最开始提到必须要给常量或者变量赋初值,如果不想赋初值,或者不习惯自动类型推导,我们还可以显示的给常量或者变量标注类型,这被称为“类型标注”
var name: String //在变量名后加上冒号和类型名来进行类型标注
//经过类型标注后,可以不赋初值
var name: String = "kt" //人为标注为String类型
var age: Int = 20 //人为标注为Int类型
//这种情况下的类型标注有些多此一举
类型安全
swift支持类型推导,这个功能很方便,与此同时,swift也是严谨的,因为它是类型安全的。
所谓的类型安全是指,不支持常量、变量之间的隐式类型类型转换。
var a = 1
var b = 1.5
var c = a + b //报错
也就是说,不同类型的变量(常量)不可以出现在”+、-、*、/等运算符两侧”。
所谓的常量、变量之间,其实是指字面量之间的隐式类型转换是可以的。比如如下代码:
var pi = 3 + 0.1415926 //这个必须可以啊,否则就乱套了。
类型转换
如果我希望把整数型和浮点型变量相加怎么办呢,可以使用强制类型转换,又称显式类型转换。
var a = 1
var b = 1.5
var c = a + b //报错
var c = Double(a) + b //正确,得到值为2.5的Double型变量c
var c = a + Int(b) //也正确,得到值为2的Int型变量c
需要说明三点:
- 精度由高向低或者由低向高都可以,不过高精度转向低精度会丢失小数点后的数据。
- 上述代码不可以改为“var c = Float(a) + b”,理由是类型安全 + 宽类型优先。
- 注意和C语言的语法区别,C语言中的写法为(int)a,swift中的括号应加在变量上。
类型别名
通过typelias关键字可以重新命名类型,类似于C语言中的typedef,不过更简单。
typealias Name = String //现在Name类型和String类型是完全一样的了。
var myName: Name = "kt"
版权声明:本文为博主原创文章,未经博主允许不得转载。