log打印
print("字符串")
let name = "字符串"
print(name)
print(name + name)
print(name + "字符串")
字符串
1、swift的字符串是结构体类型的
1、字符串的创建
数组
1、swift数组通过var/let
区别数组是否为可变数组
2、数组元素类型同样必须一致
3、swift数组的空间不足,会直接*2就像OC的 arrayWithCapacity,减少分配空间的次数,提高一点性能
4、swift数组可以用+=
或者+
直接拼接两个数组得到一个新数组,但是参加运算的两个数组必须是同一类型
1、数组创建
//构造函数创建空数组
var array2 = [Int]()//等价于var array1:[Int] = []
var array4 = Array<Int>()//等价于var array3:Array<Int> = []
2、数组增删改查
1)增append
var arr1 = [1,2,3]
var arr2 = [4,5,6]
arr1.append(4)
//此时的arr1 = [1,2,3,4]
var arr3 = arr1 + arr2
//此时的arr3 = [1,2,3,4,5,6]
arr1.append(contentsOf: arr2)
//此时的arr1 = [1,2,3,4,5,6]
2)删remove
arr1.remove(at: 0)
//此时的arr1 = [2,3,4,5,6]
arr1.removeLast(2)
//此时的arr1 = [2,3,4]
arr1.removeFirst(2)
//此时的arr1 = [4]
arr1.removeFirst(2)
//arr1.removeAll()
//此时的arr1 = [],且删除分配的空间
arr2.removeAll(keepingCapacity: true)
//此时的arr1 = [],且保留分配的空间
arr3.removeSubrange(0..<2)
//此时的arr3 = [3,4,5,6]
arr3.removeSubrange(0...2)
//此时的arr3 = [6]
3)改直接用下标改
arr3[0] = 8
//此时的arr3 = [8]
4)查index下标
var arr1 = [1,2,3,4,5,6]
arr1[0]//1
arr1[0..<2]//[1,2]
3、 遍历
字典
1、swift字典通过var/let
区别字典是否为可变字典,且key
唯一
2、swift字典的key
要求可哈希的hashable
,为了便于方便查找
hash:是指将key(字符串)转换成一个唯一的
整数然后在查找的时候就可以直接找到,不需要遍历整个集合的key,提高集合的查找效率
3、swift字典同样通过key
取value
,如果key
存在修改,key
不存在新增
1、字典创建
var dict = Dictionary<String,Int>()
var dict1:[String:Int]?
var dict2:[String:Int] = [:]
2、字典增删改查
3、字典遍历
控制流
1、if语句
1)if语句的()可以省略{}绝对不能省略
2)if的条件只能是bool不存在非0即真的逻辑
3)if...else...在oc中用三目运算,而在swift中则使用
(条件) ? a语句 : b语句 (oc)
条件 ?? 默认值 (swift如果条件成立则表达式的值为条件表达式的结果,否则表达式的值就是默认值)
2、for循环
1)废弃传统的for
循环,因为swift3.0废除了 ++
//正常序列
for i in 0 ... 8
{
}
//反转序列
for i in (0...8).reversed() {
}
//输出10 9 8 7 6 5 4 3 2 1
for i in stride(from: 10, to: 0, by: -1)
{
print(i)
}
//输出0 1 2 3 4 5 6 7 8 9 10
for i in stride(from: 0, through: 10, by: 1)
{
print(i);
}
3、switch
1)switch后的()和每一个case{}可以省略,最外围的{}不能省略
2)switch默认是不穿透的,而oc中默认穿透的需要用break阻止穿透,如果需要穿透fallthrough
,case没有任何语句才需要使用break
3)switch在oc中每一个case必须使用{}来保证作用域,swift中则不需要
4)switch在swift中必须覆盖所有情况,如果case不能覆盖到全局,就必须使用default补全,oc中则不需要覆盖所有情况
5)switch在swift中如果存default必须在其他所有case之后,就是必须写在最后面,oc中default没有位置约束
6)let case (t1,t2)
4、while
while循环与oc的区别就在于do{...}while变成了repeat{...}while
注释
//MARK:小段落注释 //MARK:- 大段落注视 // FIXME:需要修改 // TODO:需要实现
对象和结构体
Swift并不会为class自动生成默认的init方法。如果我们不定义它,Swift编译器会报错。因此,无论多么简单的class,我们至少要为它定义一个初始化其所有属性的init方法。虽然有时候这样做很无聊,但是我们没有其它的选择。因为class并不简单表达一个“值”的概念。Swift要求我们明确通过init方法说明“打造”一个对象的过程。相反,struct表达一个自定义的“值”,在没有特别说明的情况下,一个值的初始化当然是把它的每一个member都按顺序初始化。