迅捷结构

79 阅读2分钟

本教程属于Swift系列

结构是Swift的一个基本概念。

结构在Swift中无处不在。甚至内置类型也是结构。

我们可以创建结构的实例,我们称之为对象

在大多数语言中,对象只能从类中创建。Swift也有类,但你也可以从结构中创建对象,官方文档建议更倾向于结构,因为它们更容易使用。

它们是类的轻型版本。

结构可以有属性,结构可以有方法(函数),结构可以定义下标,结构可以定义初始化器,结构可以符合协议,结构可以被扩展。

类允许的一个重要功能是继承,所以如果您需要继承,您可以使用类。

结构是用这种语法定义的。

struct Dog {

}

在一个结构中,你可以定义存储的属性

struct Dog {
    var age = 8
    var name = "Roger"
}

这个结构定义定义了一个类型。要用这种类型创建一个新的实例,我们使用这种语法。

let roger = Dog()

一旦你有了一个实例,你就可以使用点语法访问它的属性。

let roger = Dog()
roger.age
roger.name

同样的点状语法也用于更新属性值。

roger.age = 9

您也可以通过属性值创建一个结构实例。

let syd = Dog(age: 7, name: "Syd")
syd.age
syd.name

为此,属性必须被定义为变量,使用var ,而不是作为常量(使用let )。尊重这些属性的定义顺序也很重要。

结构可以有实例方法:属于一个结构的实例的函数。

struct Dog {
    var age = 8
    var name = "Roger"
    func bark() {
        print("\(name): wof!")
    }
}

我们也有类型方法

struct Dog {
    var age = 8
    var name = "Roger"
    func bark() {
        print("\(name): wof!")
    }
    static func hello() {
        print("Hello I am the Dog struct")
    }
}

被调用为Dog.hello()

结构是一种值类型。这意味着当它们被传递给一个函数,或者从一个函数返回时,它们会被复制。而当我们把一个指向结构的变量分配给另一个变量时。

这也意味着,如果我们想更新一个结构的属性,我们必须使用var ,而不是let 来定义它。

Swift中的所有类型都被定义为结构。Int、Double、String、数组和字典等等,都是结构。