这是我参与「第四届青训营 」笔记创作活动的第12天
Swift 与 OC 的区别
- 速度更快
- 安全性更高
- nil
- 显示转换
基础语法
1. 变量定义
可变变量用 var,不可变变量用 let
// 可变变量
var name: String = "Michael"
// 不可变变量
let age: Int = 20
age = 18 // Cannot assign to value: 'age' is a 'let' constant
Swift 可以自动推断类型,如上面的 name,age,赋值的时候可以自动推断出来是 String,Int,因此上面的类型声明可以省略
var name = "Michael"
let age = 20
2. 类型集合
- 数组:数组以有序的方式来储存相同类型的值,相同类型的值可以在数组的不同地方多次出现
- 字典:无序的互相关联的同一类型的键和同一类型的值的集合,每一个值都与唯一的键相关联
- 合集:合集将同一类型且不重复的值无序地储存在一个集合当中
// 数组
var names: [String] = ["Tom", "Jony"]
// 字典
var classes: [String: [String]] = ["class 1": ["Tom", "Jony"],
"class 2": ["Peter", "Egg"]
]
// 合集
var id: Set<String> = ["1", "2", "3", "4"]
print(id) // 1, 2, 3
3. 可选值:nil
可选类型用 ? 表示 (最好不要用!强制解包,容易crash)
可以用is as转换类型
let name: String?
name = "Tom"
if let name = name as? String {
print(name) // Tom, String类型
}
4. 控制流:for,while
for xx in {
}
// for x in 0..<10
while() {
}
函数
1. 定义函数
Swift 使用 func 关键字作为前缀,用 -> 来明确函数返回的类型,当不想输入参数名时,可以前面加 _ 表示省略该字符
// 传参
func greet(person: String) -> String {
let greeting = "Hello, " + person + "!"
return greeting
}
func greet2(_ person: String) -> String {
let greeting = "Hello, " + person + "!"
return greeting
}
2. 调用函数
Swift 中可以直接输入函数名,和所需参数,来调用一个函数,若参数前面带了下划线,则参数名可以省略
print(greet(person: "Tom"))
// Hello, Tom!
print(greet2("Tom"))
// Hello, Tom!
3. inout
在 Swift 中,用 inout 参数表示参数传递是引用传递
在没有用 inout 修饰参数的函数调用时,是复制了一份传参供函数内部使用,函数内部对参数的处理不会影响到原来的参数
func swapTwoDoubles(_ a: inout Double, _ b: inout Double) {
let temporaryA = a
a = b
b = temporaryA
}
var a = 8.0
var b = 7.0
swapTowDoubles(&a, &b) // 加上&表示引用
print(a) // 7.0
print(b) // 8.0
func swapTwoDoubles(_ a: Double, _ b: Double) {
let temporaryA = a
a = b
b = temporaryA
}
swapTowDoubles(a, b)
print(a) // 8.0
print(b) // 7.0