作为iOS开发者,只会OC肯定是不够的,Swift作为苹果强推的一门语言,一定要掌握。这篇博客整理了一些Swift语法基础中的要点(本文书写时的Swift版本为3.1)
一、标识符的定义:
定义变量的格式:
var num : Int = 10
定义常量的格式:
let num : Int = 10
(通常把标识符定义为常量,如果确定需要修改时再修改为变量,保证数据安全)
二、类型推导
当一个标识符在定义时有直接赋值,那么可以省略类型。编译器会自动推导其类型
三、类型转换
- 隐式转换
Swift中没有隐式转换 - 强制转换
- 在OC中,通过在变量之前用小括号括起类型的方式进行强制转换
- 在Swift中,通过在标识符之前写上类型,用小括号括住标识符的方式转换:
let a = 10.0
let b : Int = Int(a)
四、逻辑分支
- if语句
- 条件语句的括号可以省略
- 没有非零即真的规则,必须是Bool类型
- 三目运算
- 语句格式与OC中完全一致
- guard
- 守卫。根据判断条件筛选,提高代码可读性
- switch
- 不用写break,如果希望穿透,则加上
fallthrough
- 可以判断多个条件,在case后用逗号分隔
- 可以判断浮点型和字符串
- 可以判断区间:左闭右开区间
min..
,表示[min,max);左闭右闭区间 min...max
,表示[min,max]
五、循环
- for循环
- while循环
- repeat while循环
六、字符串
Swift中的字符串是一个结构体,而不再是一个对象。效率更高
- 遍历字符串:
for char in str.characters {
print(char)
}
- 拼接字符串
(1)字符串与字符串拼接。
直接使用+运算即可
(2)快速拼接。
在字符串中通过(param)的方式拼接参数:
let age = 18
let name = "xyz"
let height = 1.88
let info = "my name is \(name), my age is \(age), my height is \(height)"
打印结果my name is xyz, my age is 18, my height is 1.88
(3)格式化拼接。
以拼接时间为例
let min = 2
let sec = 7
let timeString = String(format : "%02d:%02d", arguments:[min, sec])
打印结果02:07
3.截取字符串
一般是先把String类型转换为NSString类型,再调用NSString的方法进行截取
let urlString = "www.baidu.com"
let header = (urlString as NSString).substring(to: 3)
//结果为"www"
let middle = (urlString as NSString).substring(with: NSMakeRange(4, 5))
//结果为"baidu"
let subfix = (urlString as NSString).substring(from: 10)
//结果为"com"
4.判断字符串是否为空
- 与空字符串进行比较
if str == "" {
//do something
}
- 判断count是否为0
if str.characters.count == 0 {
//do something
}
- 判断isEmpty属性是否为true
if str.isEmpty {
//do something
}
七、数组
- 定义数组
- 定义不可变数组:使用let修饰符定义
let array = ["Baidu","Alibaba","Tencent"]
- 定义可变数组:使用var修饰符定义
var mutableArray = [String]()
- 操作可变数组
- 增
mutableArray.append("163")
mutableArray.append("HuaWei")
- 查
mutableArray[0]
- 改
mutableArray[0] = "HuaWei"
- 删
mutableArray.remove(at: 0)
- 遍历数组
- 根据下标遍历
for i in 0..
- 快速遍历数组中的元素
for name in array {
print(name)
}
- 遍历数组的指定区间
for name in array[a..
- 合并数组
相同类型的数组可以通过加法运算符直接合并
let resultArray = array1 + array2
八、字典
- 定义字典
- 定义不可变字典:使用let修饰符定义
let dict : [String : Any] = ["name" : "xyz" , "age" : 36, "height" : 1.86]
- 定义可变字典:使用var修饰符定义
var dictM = [String : Any]()
- 对可变字典的操作
- 增
dictM["name"] = "xyz"
dictM["age"] = 36
dictM["height"] = 1.86
- 查
dictM["name"]
- 改
dictM["height"] = 1.58
- 删
dictM.removeValue(forKey: "name")
- 遍历字典
- 遍历键
for key in dictM.keys {
print(key)
}
- 遍历值
for value in dictM.values {
print(value)
}
- 遍历键值对
for (key, value) in dictM {
print(key)
print(value)
}
- 合并字典
只能通过遍历、往可变字典中追加的方式合并
九、元组
- 什么是元组?
一种类似于数组或者字典的数据结构,可以用于定义一组数据。常用于作为方法的返回值 - 定义元组
- 把元素用圆括号括起来,快速创建元组
let info1 = ("xyz",18,1.88)
通过点语法加下标获取元素
info1.0
- 创建元组的同时给元组起别名。
let info2 = (name : "xyz", age : 18, height : 1.88)
获取元素时可以使用别名来获取元素
info2.name
- 直接把元素的别名括起来作为元组的名称。这样的定义方式会直接给元素赋值,右侧元组内的元素会被分解为对应的变量或常量
let (name, age , height) = ("xyz", 18, 1.88)
取元素时可以直接用别名取
name
- 元组的比较
如果元组中的值都可以比较,那么元组就可以比较
元组比较按照从左往右、逐值比较的方式进行,知道发现有两个值不等为止。如果所有值都相等,那么两个元组相等。
(1, "abc") < (2, "aaa") // true, 1 < 2
(4, "apple") < (4, "bad") //true, 4 == 4, apple < bad
("abc", 12) == ("abc", 12) //true 完全相等
注意:由于Bool类型不可以进行比较,所以包含布尔类型的元组不可比较