天天看点

Swift入门(一)——基本语法基本语法类型附录

最近开始学习swift,把学习的过程和总结整理成一个系列,方便日后回顾总结。

基本语法

基础语法

swift中每一行结束后不需要加分号,多个语句在同一行内需要用分好隔开

//表示注释,或者用

常量

常量是指定义之后无法修改值的量,比如设置一个最大尝试登陆的次数,它的值一旦被确定,就不应该在程序中被修改。swift中的常量用let表示,定义方法如下:

let maxAttemptTime =  //正确
maxAttemptTime =  //错误,常量一旦定义不可以改变
let maxAttemptTime //错误 
           

另外要注意的是,常量在定义的时候必须要赋初值,当然也可以不这么做,后面会详细介绍。

变量

和常量类不同的是,变量用var表示,可以随意改变值

var currentAttemptTime =  //正确
currentAttemptTime = currentAttemptTime +  //正确
           

打印常量和变量

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 =  //自动推导为Int类型
var pi =  //自动推导为Double类型
           

宽类型优先

既然swift支持类型推导,那么π的近似值3.1415926,会被推导为什么类型呢?是Float还是Double? 答案是Double,因为swift具有宽类型优先的特性,也就是为自动推导为取值范围更宽泛的类型。

类型标注

最开始提到必须要给常量或者变量赋初值,如果不想赋初值,或者不习惯自动类型推导,我们还可以显示的给常量或者变量标注类型,这被称为“类型标注”

var name: String //在变量名后加上冒号和类型名来进行类型标注
//经过类型标注后,可以不赋初值

var name: String = "kt" //人为标注为String类型
var age: Int =  //人为标注为Int类型

//这种情况下的类型标注有些多此一举
           

类型安全

swift支持类型推导,这个功能很方便,与此同时,swift也是严谨的,因为它是类型安全的。

所谓的类型安全是指,不支持常量、变量之间的隐式类型类型转换。

var a = 
var b = 
var c = a + b //报错
           

也就是说,不同类型的变量(常量)不可以出现在”+、-、*、/等运算符两侧”。

所谓的常量、变量之间,其实是指字面量之间的隐式类型转换是可以的。比如如下代码:

类型转换

如果我希望把整数型和浮点型变量相加怎么办呢,可以使用强制类型转换,又称显式类型转换。

var a = 
var b = 
var c = a + b //报错
var c = Double(a) + b //正确,得到值为2.5的Double型变量c
var c = a + Int(b) //也正确,得到值为2的Int型变量c
           

需要说明三点:

  1. 精度由高向低或者由低向高都可以,不过高精度转向低精度会丢失小数点后的数据。
  2. 上述代码不可以改为“var c = Float(a) + b”,理由是类型安全 + 宽类型优先。
  3. 注意和C语言的语法区别,C语言中的写法为(int)a,swift中的括号应加在变量上。

类型别名

通过typelias关键字可以重新命名类型,类似于C语言中的typedef,不过更简单。

typealias Name = String //现在Name类型和String类型是完全一样的了。
var myName: Name = "kt"
           

附录

查看完整专栏——《Swift轻松入门》

【Swift入门(一)——基本语法】

【Swift入门(二)——字符与字符串】

【Swift入门(三)——元组(Tuple)】

【Swift入门(四)——可选类型(Optionals)与断言(Assert)】

【Swift入门(五)——数组(Array)】

【Swift入门(六)——字典(Dictionary)】

【Swift入门(七)——结构体(Struct)】

【Swift入门(八)——功能强大的求余运算符】

【Swift入门(九)——String与Int、Double、Float等数字相互转换】

【Swift入门(十)——循环引用、弱引用和无主引用】

【Swift入门(十一)——类型转换与is、as操作】

【Swift入门(十二)——利用Extension添加逆序输出字符串方法】