在Swift 中, 不像Objective-C一样, 有些关键字可以找到对应的解释, 这里我就列一下常用的关键字详解, 陆续会有增加.
1.let关键字
用let修饰的变量会是一个不可变的常量, 也就是说不可以对它进行修改, 但如果用let修饰的常量是一个类, 那么我们可以对其所在的属性进行修改, 比如:
class PersonInfo {
let name = "xiaoming"
var age = 18
var height = 170
var weight = 65
}
let personInfo = PersonInfo()
personInfo.age += 1
print("person age is \(personInfo.age).")
// 输出的结果为: person age is 19.
这里边的name就是不可变的, 如果非要去改变, Xcode会建议你把let修改成var.
PS: 如果这个时候, 再声明一个person常量去引用personInfo, 那么person的所指向的内存块是和personInfo相同的.
2.var关键字
用var关键字声明的变量将会是一个可变的变量, 在这里, 我们并不会用var去引用一个类, 也没有必要, 继续拿上面的例子来说:
class PersonInfo {
let name = "xiaoming"
var age = 18
var height = 170
var weight = 65
}
let personInfo = PersonInfo()
personInfo.age += 1
print("person age is \(personInfo.age).")
这里面的age就是属于var类型, 在初始化之后, 我们仍然可以给它进行修改.
PS: 如果这个时候, 我们用var修饰personMode变量去引用personInfo, 那么personMode和personInfo所指向的内存块并不同, personMode会将personInfo完整的拷贝一份, 然后放在另外一块内存块去管理.
3.class关键字
在Swift当中, 我们是使用Class关键字去声明一个类, 比如:
class PersonInfo {
// class body
}
4.struct关键字
在Swift中, 如果我们需要声明一个结构体, 我们就需要使用到struct关键字, 比如:
struct PersonInfo {
// struct body
}
5.enum关键字
而我们需要声明枚举的时候, 我们就使用enum关键字, 比如:
enum PersonMode {
case zhangsan
case lisi
case wangwu(String)
case luoliu(String, Double, Int)
}
在Swift当中的enum和Objective-C并不一样, Swift的enum不会被隐式赋值为0, 1, 里面的zhangsan就是这个枚举分支的完整值, 并且在Swift中, 我们可以给enum case声明各种类型, 比如里面的case luoliu一样.
当然, 我们也可以给枚举值默认声明一个值, 但在枚举名之前, 要声明是什么类型, 比如:
enum Numbers: Int {
case One = 1, Two, Three, Four
}
let number = Numbers.One.rawValue
print(number)
6.override关键字
在Swift中, 如果我们要重写某个方法, 或者某个属性的话, 我们需要在重写的变量前增加一个override关键字, 比如:
class Ca