Swift的学习笔记(一)

发布于:2025-04-16 ⋅ 阅读:(32) ⋅ 点赞:(0)

Swift的学习笔记(一)

元组

元组(Tuple)是 Swift 中的一种强大的数据结构,用于将多个值组合成一个复合值。元组的内容可以是任意类型(不同类型的值可以组合在一起),并且每个值都可以有名称或只是位置。

基本语法

元组用圆括号 () 包裹值,多个值之间用逗号 , 分隔。

1. 创建元组

let person = ("John", 28)

上面的例子创建了一个元组,包含一个字符串 "John" 和一个整数 28

2. 访问元组的值

元组的值可以通过 位置索引名称 来访问:

let person = ("John", 28)

// 使用位置索引
print(person.0)  // 输出 "John"
print(person.1)  // 输出 28

3. 命名的元组

元组的元素可以有名称,这样更容易理解数据的意义:

let person = (name: "John", age: 28)

// 使用名称访问
print(person.name)  // 输出 "John"
print(person.age)   // 输出 28

4. 解构元组

元组可以通过解构直接将值赋给多个变量:

let person = ("John", 28)
let (name, age) = person

print(name)  // 输出 "John"
print(age)   // 输出 28

5. 忽略某些值

如果不需要某些值,可以使用 _ 忽略:

let person = ("John", 28)
let (name, _) = person

print(name)  // 输出 "John"

注:元组虽然用起来方便,但是只能用于简单的数据整合

可选值类型

在 Swift 中,Optional 是一种用来处理可能存在 “无值” 情况的类型,它是 Swift 安全性的一部分,帮助开发者避免运行时错误(如空指针异常)。

Optional 是一个枚举,表示两种可能性:

  1. 有值(some(Value))。
  2. 没有值(nil)。

定义 Optional

在类型后面加上一个问号(?)即可将该类型声明为 Optional:

var name: String? = nil

这意味着变量 name 可能有值,也可能是 nil

Optional 的基本使用

1. 给 Optional 赋值和取值
var name: String? = "Alice"  // 定义一个 Optional 类型的 String
print(name)  // 输出:Optional("Alice")
2. 强制解包(Force Unwrapping)

要从 Optional 中取出实际值,可以使用感叹号(!):

print(name!)  // 输出:Alice

⚠️ 注意: 如果 Optional 的值是 nil,强制解包会导致运行时崩溃。

if let语句的使用

if let 是 Swift 中一种常用于解包可选类型(Optional)的语法。它的作用是安全地尝试从一个可选值中提取出实际的值,如果该可选值不为 nil,则解包并将其赋值给一个新的常量或变量,供 if let 语句内部使用。若可选值为 nil,则 else 部分会被执行,或者你可以选择不执行任何操作。

var name: String? = "Alice"

// 使用 if let 解包
if let unwrappedName = name {
    print("Hello, \(unwrappedName)!")
} else {
    print("Name is nil.")
}

空合并运算符

它用于处理可选类型(Optional)中的 nil 值。该运算符的作用是:如果左边的可选值不为 nil,则返回它的值;如果左边的可选值为 nil,则返回右边的默认值。

基本示例

var name: String? = "Alice"
let unwrappedName = name ?? "Unknown"
print(unwrappedName)  // 输出:Alice

在上面的例子中,name 不为 nil,所以 unwrappedName 会被赋值为 name 的值 "Alice"

guard的使用

  • guard语句必须带有else语句,它的语法如下:
  • 当条件表达式为true时候跳过else语句中的内容,执行后面的语句组
  • 条件表达式为false时候执行else语句中的内容,跳转语句一般是return、break、continue或throw
guard 条件表达式 else {
    // 条换语句
    break
}

循环的写法

swift之中的循环和C语言的区别还是挺大的

for item in 0..<10 {
    print(item)
}

我们在swift之中一般只使用for—in循环

while count >= 20 {
    count += 1
    print(count)
}

关于while循环则是大差不差,另外需要提的一点是,count++这类操作在swift3已经被禁用了

至于C语言之中的do…while语句,则是用repeat…while代替

repeat {
    print("swift")
    count += 5
} while count < 30

Switch…case

使用元组匹配

switch 可以匹配元组,并结合模式匹配。

swift


复制代码
let point = (2, 3)

switch point {
case (0, 0):
    print("Origin")
case (_, 0):
    print("On the X-axis")
case (0, _):
    print("On the Y-axis")
case (-2...2, -2...2):
    print("Inside the box")
default:
    print("Outside the box")
}

输出

Inside the box

条件匹配(where

使用 wherecase 添加额外的条件:

let number = 15

switch number {
case let x where x % 2 == 0:
    print("\(x) is even")
case let x where x % 2 != 0:
    print("\(x) is odd")
default:
    print("Unknown")
}

输出

15 is odd

数组

数组的创建

方式 1:使用字面量
var numbers = [1, 2, 3, 4, 5]  // 自动推断类型为 [Int]
var fruits = ["Apple", "Banana", "Cherry"]  // 自动推断类型为 [String]
方式 2:显式指定类型
var numbers: [Int] = [1, 2, 3, 4, 5]
var fruits: [String] = ["Apple", "Banana", "Cherry"]
方式 3:空数组
var emptyArray: [Int] = []  // 明确指定类型
var anotherEmptyArray = [String]()  // 使用初始化器创建
方式 4:创建具有默认值的数组
var repeatedArray = Array(repeating: 0, count: 5)  // [0, 0, 0, 0, 0]

在 Swift 中,数组(Array) 是一种用于存储同一类型值的有序集合。数组是常用的数据结构,支持动态大小调整,能够快速地添加、删除和访问元素。

数组的高级操作

1. 过滤(filter)

从数组中筛选符合条件的元素:

let numbers = [1, 2, 3, 4, 5]
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers)  // [2, 4]
2. 映射(map)

对数组的每个元素进行操作,生成新数组:

let numbers = [1, 2, 3]
let squaredNumbers = numbers.map { $0 * $0 }
print(squaredNumbers)  // [1, 4, 9]
3. 归约(reduce)

将数组的所有元素合并为一个值:

let numbers = [1, 2, 3, 4]
let sum = numbers.reduce(0) { $0 + $1 }
print(sum)  // 10
4. 排序(sorted 和 sort)
  • 创建排序后的新数组:

    let numbers = [4, 2, 3, 1]
    let sortedNumbers = numbers.sorted()
    print(sortedNumbers)  // [1, 2, 3, 4]
    
  • 对原数组排序:

    var numbers = [4, 2, 3, 1]
    numbers.sort()
    print(numbers)  // [1, 2, 3, 4]
    

跳转语句

Swift 提供了多种流程跳转语句,用于改变代码的执行顺序,从而实现灵活的逻辑控制。这些语句包括 continuebreakfallthroughreturnthrowguard。它们有些和C语言很像,因此这里仅挑几个进行讲解

break跳出多重循环

Swift 允许为循环添加标记(label),通过 break 语句可以退出指定标记的循环。

语法
labelName: for ... {
    for ... {
        if condition {
            break labelName  // 跳出指定标记的循环
        }
    }
}

用例

outerLoop: for i in 1...3 {
    for j in 1...3 {
        print("i = \(i), j = \(j)")
        if i == 2 && j == 2 {
            print("Breaking outer loop")
            break outerLoop  // 跳出外层循环
        }
    }
}
输出:
i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 2, j = 1
i = 2, j = 2
Breaking outer loop

网站公告

今日签到

点亮在社区的每一天
去签到