1、注释:添加单行语句的注释使用“//”;多行注释“/**/”;
2、分号:可写可不写,一般不写;一行中多条语句时,必须写;
3、标记:在Oc中,#pragma mark - XXX ;在swift中,使用://MACK: - XXX (必须为大写)
4、在Swift中,工程没有主函数,类似于脚本语言;但实质上,是一种动态编译性语言,代码的执行顺序是有上往下依次执行;
一、变量的声明,关键字:var
var a = 10 //声明变量
a = 20 //对空格的要求非常严格,养成习惯!!!!
print(a) //打印
二、常量的声明,关键字:let
let b = 10 //变量的值是不能更改的;
三、类型标注。
为了在声明常量或变量的时候,通过添加类型标注的方式来说明当前常量或变量所代表的类型;
var c: Int = 10 //表示声明一个变量C,类型为 int类型,初始值为10;
var d: Double = 20
//在Swift中,字符与字符串的声明都是用双引号
var e: Character = “e” //字符型
var f: String = “你好” //字符串
四、常量与变量的命名
1、命名不能以数字开头;
2、不能以特殊符号开头(数学符号、制表符、连线、箭头);
3、一旦常量或变量进行类型标注之后,在后续的代码中,不能使用相同的名称;
4、尽量避免使用系统关键字命名;
可以使用的命名方式:
1、汉字: let 你 = “你好”
2、表情: let 🐶 = “小狗”
3、π : var π = 3.14;
五、数据类型的转换
var a1 = Int(“10”) //将字符串转换为Int类型
var b1 = String(10) //将数字转换为字符串
print(“(a1!) — (b1)”) //打印 (没有!会有Optional,与类型转换有关)
六、BOOL类型的声明
var bool = true //在Swift中,BOOL值,只有true 和 false
var bool2: Bool = false //声明时进行标注
七、元组变量,元组是Swift提供的新的数据结构,可以将多个元素组合在一起;在元组中,元素的数据类型可以不一致;
//方式一:声明一个名为c1的元组,两个成员:整形 和 字符串
var c1 = (4, “你好”)
print(c1.0) 访问元组中的元素(通过索引)
//方式二:
var(key1, key2) = (100, “123”)
print(key1) //通过映射的方式访问;
//方式三:
let c2 = (name:“夜凰”, age :18 , score:100) //类似于字典
print(“有个姑娘叫 (c2.name), 今年 (c2.age) 岁”) //用过key值得方式访问
八、可选类型:为了处理值缺失的情况
swift提供的新的数据类型,分为有值和无值,在swift中,系统不会自动初始化常量或变量—不声明就没有值;
****** < ? 与 ! 问题:> *******
? : 设置一个常量或变量为可选类型,如果可选类型已经被初始化,变量或常量的值为初始化的值,如果没有被初始化,变量为nil ,这个过程叫:封包;
! : 在变量或常量后面添加,表示将可选类型转换为一般类型,这个过程:解包/拆包;
var d1: Int? = 10 //因为有?的存在,表示这个变量为 Int类型的可选类型,初始值为10,
print(d1!)//打印时,需要使用!;(没有!的打印效果:Optional(10))
var d2: string? = “你好”
print (d2!)
九、if 语句
if d1 == nil { }else{ } //判断语句处,没有括号
十、可选绑定:用来判断可选类型是否包含值,如果有值,就将值赋给另外的常量或变量;
if let x = d1 {
print(x)
}
十一、断言 :用代码的形式,来实现断点的作用,用来调试程序;使用assert方法添加断言
如果函数中,表达式为真,则无影响,若表达式为假,则程序会在这里崩溃;
let e1 = 10
assert(e1 > 100, “添加断言信息”) //作用,辅助调试程序
何时使用断言:
1、整数类型的下标索引被传入一个自定义下标脚本实现,但是下标索引值可能太小或者太大。
2、一个可选值现在是nil,但是后面的代码运行需要一个非nil值。
3、需要给函数传入一个值,但是非法的值可能导致函数不能正常执行。
十二、错误处理:
1、抛出异常(throws) —>需要进行捕捉异常(添加关键字:try, 两种形式:try? / try!)
十三、运算符
1、一元运算符:!、i++
2、二元运算符:a + b , a % b
3、三元运算符:a ? b : c
4、赋值运算符: let a = 10;
5、算数运算符:a + b , a - b , a * b , a / b
6、求余运算符:在swift中,可以使用浮点型进行求余运算 132.3 % 2.2
7、自增自减运算符:++ 、 - -
8、复合赋值运算符:+= 、 -= 、 *= 、 /=
9、比较运算符:返回类型一般为bool值,a > b
10、条件运算符:a ? b : c
11、空合运算符:是三目运算符的升级版
a ?? b //表示:对可选类型进行空判断,如果a有值则对a进行解封并返回a的值,否则返回默认值b ;
var color1: String? = “yellow”
var color2 = “blue”
var userColor = color1 ?? color2 //必须符合:color1必须为可选类型;color2 与 color1的数据类型必须一致
print(userColor)
12、逻辑运算符
与:&& 、或:| | 、非:!
13、区间运算符
闭区间运算符:(a...b) 定义一个包含从a到b之间(包含a、b)所有值得区间;其中 b必须大于a
半开区间运算符:(a..<b)定义一个从a到b但不包括b的区间。 之所以称为半开区间,是因为该区间包含第一个值而不包括最后的值。
半开区间的实用性在于当你使用一个从0开始的列表(如数组)时,非常方便地从0数到列表的长度。
十四、字符串
1、初始化:
var str1: String = “” //声明一个空字符串
var str2: String = String() //方式二
print(str1.isEmpty) //判断字符串是否为空
if str1 == str2 {} //判断字符串是否相等
var str3 = “ni hao”
var str4 = “wo bu han”
var str5 = str3 + str4 //进行字符串的拼接
for c in str5.characters {} //字符串的遍历,遍历字符
2、在字符串中插入字符
str3.insert(“a”, atIndex:str3.startIndex) //startIndex表示在最前面插入字符;
endIndex 表示在最后面插入字符;
str3.endIndex.advanceBy(-2) 表示从字符串的末尾往前数第几位插入字符
str3.startIndex.successor() 表示在正向第二位插入字符
str3.endIndex.predecessor() 表示在倒数第二位插入字符
3.获取字符串中字符的个数:
str3.characters.count
4、通过索引获取对应的字符
for i in str3.characters.indices { print(str3[i])}
5、删除字符
str3.removeAtIndex(str3.startIndex) //删除开始位置的字符 (其余位置参考插入时的各个位置)
6、删除指定范围的字符串
var range = str3.startIndex..<str3.endIndex.advancedBy(-4)
str3.removeRange(range)//删除从开始位置到倒数第四位的字符串
7、字符串的比较
var str1 = “abc”
var str2 = “bcd”
if str1 == str2 {}
8、判断前缀与后缀
var str1 = “ni hao”
str1.hasPrefix(“h”) //判断前缀
str1.hasSuffix(“o”) //判断后缀
十五、数组
1、创建空数组
var arr1 = Int //方式一
var arr2 = Array<Int>() //方式二
var arr6 = [1, 2, 3, 4]//方式三:字面量的形式创建数组
arr1.isEmpty //判断数组是否为空
//创建带有默认值的数组
var arr3 = [Int](count:10 , repeatedValue:5) // 数组为10个5
var arr4 = Array<int>(count:10, repeatedValue:1) // 数组为10个1
2、合并数组,两个数组中的数据类型必须一致,相加后两个数组合并为一个数组
var arr5 = arr3 + arr4 //加法
arr6[3] //访问数组
arr6[0] = 10 //修改数组元素
十六、集合
1、创建集合 var set1 = Set<Int>() //空集合
2、存放数据 set1.insert(10) set1.insert(20) //可以多次插入,是无序的
3、删除集合中的某个元素:set1.remove(20)
4、遍历集合(for...in..{})
for i in set1.sort() { //set1.sort()获取到集合中所有的元素
}
5、使用字面量的方式创建集合(需要添加类型标注)
var set2: Set<Int> = [12, 3, 46, 5]
var set3:Set<String> = [“a”, “s”, “e”]
6、集合的运算
var set4: Set<Int> = [4, 56, 1, 3]
var set5: Set<Int> = [4, 6, 1, 31]
var set45 = set4.intersect(set5) // a.intersect(b) 获取集合的交集
var set45 = set4.exclusiveOr(set5) // a.exclusiveOr(b) 获取集合交集的差集
var set45 = set4.union(set5) // a.union(b) 获取集合的并集
var set45 = set4.subtract(set5) // a.subtract(b) 获取集合4的与集合5的差集
判断两个集合是否相等: ==
判断一个集合是否包含另外一个集合:set4.isSubsetof(set5)
判断一个集合是否包含在另外一个集合:set4.isSupersetOf(set5)
判断一个集合是否为另外一个集合的子集并判定两个集合是否不相等:set4.isStrictSubsetOf(set5)
判断一个集合是否为另外一个集合的父集并判定两个集合是否不相等:set4.isStrictSupersetOf(set5)
判断两个集合是否有相同的值:set4.isDisjoinWith(str5)
十七、字典 Dictionary<key , value> 无序存储
1、创建空字典:var dic = Int : String //创建了一个空的 [int : String] 字典
通过字面量创建字典:var dic2 = [1 : “a”, 2 : “b”]
2、访问字典元素:dic2[2]! (需要 !解析)
3、修改字典中的元素: dic3[1] = “f”
4、遍历字典:
for (key, value) in dic2 {
print(“(key) — (value)”)
}
有序遍历字典
for key in dic2.keys.sort() {// dic2.keys.sort() 得到数组中所有的key值
var value = dic2[key] //获取对应的value
}
十八、循环控制语句
1、for in 循环
for _ in 1…10 { _ 表示忽略对该值得访问,用到的地方很多,很灵活,必须掌握住
“遍历1到10”
}
2、while 循环
3、repeat while 循环 (相当于 do while )
4、Switch 语句,与C中不同,switch中没有break,但是当匹配的case分之中的语句执行完毕后,不会继续向下执行;
var somePoint = (2, 3)
switch somePoint {
case(1, 1): print(“13”)
case(2, _): print(“12”)
default: print(“default”)
}
//绑定元组值
switch somePoint {
case(let x, 3): print(x) //会进行匹配
default: print(“default”)
}
//where 条件语句,用于增加额外的条件
switch somePoint {
case let(x, y) where x == y :
print{(“(x) — (y)”)
default: print(“default”)
}
//贯穿 fallthrough,添加贯穿之后,会接着之后后面的语句
var Sp2 = (2 , 2)
switch Sp2{
case (2, 1):
fallthrough //添加贯穿语句
case (2, 2):
default: print(“default”)
}