Swift系列1-基础内容

常量和变量

常量,let关键字;变量,var关键字
常量和变量:把名字和特定类型的值关联起来;
常量:定义的时候赋值,一经设置不可被修改;
变量:可以先定义后赋值,或者定义的时候赋值,设置了之后可以再次修改,赋予新值;

1
2
3
4
//例子示范
let a:Int = 100;print(a)//定义了一个类型为整型的常量a,如果你尝试去修改a,Xcode会报错;
var b:CGFloat = 1.1;print(b)//定义了一个类型为浮点型的变量b;
b = 2.2;print(b)//可以对变量重新进行赋值

定义多个相同类型的常量或者变量,使用(,)隔开

1
2
let a1:Int = 2,a2 = 3,a3 = 33;print(a1,a2,a3)
var b1:CGFloat = 2.1,b2 = 3.1,b3 = 3.22;print(b1,b2,b3); b1 = 2.2;b2 = 3.2;b3 = 3.32

类型标注,类型安全和类型推断

类型标注

类型标注:初始化的时候定义该常量或变量是什么类型的就赋值什么类型;

1
2
3
let name:String = "mark";print(name) //定义了一个常量name,类型为String
var time:Int;time = 1;print(time) //先定义类型,后赋值
var arr = [Any]();arr = ["1","2"];print(arr)//定义一个类型为Any的数组,里面可以放着任意类型,包括对象类型

类型安全

Swift是一门类型安全的语言,类型安全的语言让你知道代码可以处理值的类型,如一段代码你期望获得String类型,就不能赋值Int类型.
类型安全在编译期就会报错,指出哪里的类型不符合对应的要求,可以帮助你在开发阶段更早的发现并修复错误;

1
2
3
var age:Int = 12;
//age = 11.2;如果这样赋值Double类型就会报错
age = 16;print(age)//正确的赋值

类型推断

当你在初始化变量或者常量时,如果没有标注当前值的类型,Swift会帮你推断出当前变量或者常量的类型;

1
2
3
4
5
let gender = 1;print(gender)//整型Int
let p1 = 1.1;print(p1)//会推断Double而非Float或CGFloat
let p2 = 2 + 2.22;print(p2)//整型和浮点型相加,会推断出Double类型
let firstName = "zu";print(firstName)//字符串String
var lable = UILabel();lable = UILabel.init();print(lable.text as Any)//UILabel类

注释,分号

注释

编译器会忽略注释里面的语句
两条斜杠表示(//)单行注释
多行注释(/* */)

1
2
3
4
5
6
7
8
9
//单行注释
/*
多行注释
11111
/*
套嵌注释
*/
22222
*/

分号(;)

Swift语句不要求每一段代码结束后都要分号,当然你写也不会有问题;但同一行多个语句一定要用分号隔开;

1
let f1 = 19;print(f1)//这是两个语句,需要(;)隔开

整型,浮点型,布尔值,元组

整型

Int关键字,整型就是没有小数的数字,如12,-23;整型可以是有符号(正,零或者负),也可以是无符号的(正数,零);

1
2
let i1:Int = 123,i2 = 0,i3 = -33;print(i1,i2,i3)//有符号的
let ui1:UInt = 123;print(ui1)//无符号的

浮点型

浮点型:Double,CGFloat,Float,有小数的数字;Double 64位机器,Float 32位机器,CGFloat 兼容64位和32位机器;
推荐使用CGFloat

1
let c1:CGFloat = 2.22;print(c1)//浮点型

布尔值

布尔值:Bool关键字,true表示真,false表示假;不能使用1或者0来表示真假

1
let t1:Bool = true;print("布尔值 = \(t1)")

元组

元组:多个值合并成单一的复合型的值,元组内的值可以是任何类型的值,不需要是同一个类型;
使用括号()来表示元组.

1
2
3
let y1 = ("age",30);print(y1.0,y1.1)//一个类型为(String,Int)的元组,通过下标来访问它的值,下标从0开始
let y2:(f:CGFloat,i:Int) = (1.11,2);print(y2.f,y2.i)//声明的时候给每一个元素命名,可以通过命名来查找
let y3:(_:String,j:String) = ("2","3");print(y3.j)//当你不需要使用元组中某个数据时,可以使用_来处理

数值类型转换,类型别名,可选项

数值类型转换

整型浮点型相互转换

1
2
let o1 = 2;let o2 = CGFloat(o1);print(o1,o2)//整型转浮点型
let o3 = 2.33;let o4 = Int(o3);print(o3,o4)//浮点型转整型,会截取小数点前面的值

类型别名

类型别名:typealias关键字,就是数据类型起另外一个自定义的名字,使用的时候,实际还是那个数据类型

1
typealias FFINT = Int;let new:FFINT = 10;print(new)//FFINT还是Int类型,只是对Int赋予了一个FFINT的别名

可选项(?)

可选项(?):可以利用可选项来处理值缺失的情况.
必须是变量并且不赋值时等于nil.
可选意味着:这里有一个值,它等于x或者这里根本没有值它为nil;
nil:你可以将可选变量赋值为nil,表示为没有值;
注意:nil不能用于非可选常量或变量,如果你代码中的常量或变量表示某个条件下的值缺失,你应该给他声明为对应的可选项;
跟OC差别:
OC中的nil是一个指向不存在对象的指针,而Swift中nil不是指针,而是值缺失的一种特殊类型,任何类型的可选项都可以设置为nil,而不仅仅是对象类型;

1
2
3
4
5
6
7
8
var str:String? = "game";str = nil;print(str as Any)
let str1 = "12321";let str2 = Int(str1);print(str2 ?? 0)//字符串转整型,需要确保字符串可以转成为整型

var networkCode:Int? = 404;print(networkCode as Any)
networkCode = nil;print(networkCode as Any)

var otherName:String?;print(otherName as Any);//提供的可选变量没有值,默认是nil
otherName = nil;

!:强制展开

!:强制展开,”我知道可选项里面是有值的,展开把”;
注意:使用!来获取一个不存在的可选值会导致运行报错,使用!强展开时一定要确保可选项包含一个非nil的值;

1
2
3
4
5
var myDay:String?
myDay = "一月二十六";print(myDay!)//我知道这个可选变量有一个非nil的值,所以强制展开
if myDay != nil {
print(myDay!)
}

可选项绑定

可选项绑定:如果Int(myDay!)返回一个可选的Int类型,那么把这个值赋予给一个新的常量newDay

1
2
3
4
5
if let newDay = Int(myDay!) {//可以判断字符串是否可以转为整型
print("myDay! 可以转换为Int类型 \(newDay)")
}else{
print("myDay! 不能转换为Int类型 \(myDay!)")
}

隐式展开可选项

1
2
3
4
5
6
7
8
var canChoice:String!//隐式可选项
canChoice = "canChoice";print(canChoice as Any)

let key:String! = "new key"
let newKey:String = key;print(newKey)//key 不需要key!这样进行展开

let ey:String? = "new key"
let newEy:String = ey!;print(newEy)//ey 需要ey!这样进行展开

end