摘要訊息 : 學習 Swift 中的結構體.

0. 前言

本文于 2022 年 3 月 17 日进行一次更新和修正. 修正之后本文已经归档, 不再享受更新.

1. 结构体的定义

struct 结构体名称 {
    // let cnt1 = some_value
    // var var2
    // ...
    // func function_name(parameter_list) {...}
}

Swift 结构体中任意类型的值在传递的时候总是被拷贝. 例如, 现在想要创造一个动物园管理系统 :

struct zoo {
    let zoo_name = "BeijingZoo"
    var name : String
}
let animal = zoo(name : "Tiger")
print(animal.name)    // 结果 : Tiger
var new_animal = zoo(name : "Tiger")
new_animal.name = "Elephant"
print(new_animal.name)    // 结果 : Elephant

2. 结构体的方法

和 Swift 中的枚举一样, 同样可以给结构体添加方法从而实现拓展结构体的功能. Swift 中, 结构体中的方法无法更改结构体中某一个量的数值, 包括变量 :

struct zoo {
    let zoo_name = "BeijingZoo"
    var animal_name1 = "Tiger"
    var animal_name2 = "Elephant"
    func print_zoo_name() {
        print(zoo_name)
}
    func say_hello_to_animal_1() {
        print("Hello, \(animal_name1)!")
    }
}
let z = zoo()
z.print_zoo_name()    // 结果 : BeijingZoo
z.say_hello_to_animal_1()    // 结果 : Hello, Tiger!

3. 结构体的下标

一个结构体可以为其定义多个下标, 并且下标会基于传入的索引值的类型, 选择合适的下标重载使用. 下标没有限制单个维度, 可以使用多个输入形式参数来定义下标, 满足自定义类型的需求. 可以使用关键字 subscript 来定义下标, 并且指定一个或者多个输入形式参数和返回类型 :

struct my_subscript {
    var number : Int
    subscript(num : Int) -> Int {
        return number * num
    }
}
let index = my_subscript(num : 4)
print(index[10])    // 结果 : 40