3.1 略
3.2 变量和常量
let常量只读,var变量可读可写
单行代码可声明多个常亮或者变量
Let a = 1,b=2,c=3
3.2.1 常量和变量的命名
- 不能包含任何数学符号 空格和剪头
- 不能用数字作为标识符的首字母,可放置其他位置
- 不得重名
- 常亮变量不得互相转换
- 常亮变量类型一经定义不得发生改变
- 不要使用Swift关键字作为变量或者常量名,如果有这个需要,用(')括起来
3.2.2打印常量和变量
- println(let)
- println(var)
- 打印内插在字符串中的常量或变量的值或表达式
语法为:把字符串中的常量名或变量名或表达式用括号括起来,并在前面加反斜杠(\let)print(" 你的名字是 (\name)")
- Print println二者唯一的却别是ln会加一个换行符 nslog也是ok的
3.3类型标注Type Annotations
swift有类型推到(Type Inference)但是类型推导并不是使用于所有场景,比如在类型参数中,就必须先定义一个类型作为占位符使用,否则编译器无法进行类型推导
使用类型标注为常亮或变量指定类型 var welcomMessage : String
3.4注释
//单行注释
/* */多行注释,多行注释里面可以嵌套多行注释
3.5分号的落寞
不强制要求为每一个条语句(Statement)添加分号
如果要把多行语句放到一个物理行,那就必须添加分号
//这里的分号为强制添加
let myString = "HelloWorld"; println(myString)
//这里的分号可不加
print("Hello World")
3.6语法界的直性子--整形
整型两种 有符号 signed 无符号unsigned两种都包括0,无符号无负数
8bit占一个字节,UInt8 16 32 64分别指该整形做占用的内存空间大小
如果没有特殊的需求,都不应显示地为一整数指名类型,即使我们知道这个整形不可能为负数,这是因为,让swift编译器为我们根据平台的情况自动选择实际类型,这样可以提高代码平台的灵活性,减少类型间转换的次数。而且即使实在32位机上,int的取值范围也从-2147483638到 2147483647 对大多数情况来说,这也够用了!
3.7语法界学术范---浮点型
默认double
3.8类型安全和类型推导
什么是类型安全:
类型安全就是在编译代码时,执行严格的类型检查,把所有类型不匹配都标注成一个错误,好处是,可以让程序员在早起发现并解决一些其他非类型安全的语言中由隐式类型转换所引入的错误,从而提高程序的健壮性!
var anInt:Int =10
var aChar:Character= "a"
//编译时错误,加号运算符不支持左操作数为Int,右操作数为Character
var anotherChar:Character= anInt + aChar
//编译时错误,Character不能转换为Int
var anotherInt:Int= anotherChar
其他非类型安全中,常见的变量或常量间的隐世类型转换,在swift中是不被允许的!
但这并不是说声明变量常量的时候要指定类型,因为还有类型推到。
整数被推导成int
小数被推导成double
还有一点:
Swift中,数字字面量之间的运算,支持隐式类型转换,但数字类型的变量及常量之间的运算,则不支持隐式类型转换,简单来说,字面两之间的运算和变量或常量之间的运算规则不同。
Pi = 3 + 0.1415092允许
Pi = intLet + floatLet不被允许
3.9数字字面量Literals
直接出现在代码中的值和变量常量相对应
整形字面两:
- 十进制格式 ,数字无前缀
- 二进制格式,数字加前缀0b
- 八进制格式,数字加前缀0o
- 十六禁止格式,数字加前缀0x
let decimalInt = 17
let binaryInt = 0b10001
let octalInt = 0o21
let hexInt = 0x11
浮点型字面量:
- 十进制无前缀
- 1.25e2
- 1.25e-1
- 十六进0x制有前缀两种
- 0xFp2
- 0xFp-2 15乘以2的-2次方
- 三种不同浮点型字面量的写法
let decimalDouble = 12.1875
let exponentDouble = 1.21875e1
let hexadecimalDouble = 0xC.3p0
- Swift增加了字面量的可读性
let paddedint = 001234 // 实际上等于1234
let oneMillion = 1_000_000 //等于1000000
let justOverOneMillion = 1_000_000.000_000_1 //等于1000000.0000001