Swift 基础 | 青训营笔记

70 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第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 可以自动推断类型,如上面的 nameage,赋值的时候可以自动推断出来是 StringInt,因此上面的类型声明可以省略

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