swift学习之基础语法一

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()//等价于var array3:Array = []

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字典同样通过keyvalue,如果key存在修改,key不存在新增

1、字典创建

var dict = Dictionary()
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都按顺序初始化。

你可能感兴趣的:(swift学习之基础语法一)