📜  swift struct - Swift (1)

📅  最后修改于: 2023-12-03 15:05:26.071000             🧑  作者: Mango

Swift Struct - Swift

Swift Struct是Swift编程语言中的一个特殊的数据类型。相比于类(Class),结构体(Struct)在Swift中被设计为更加轻量级的数据类型。因为Swift Struct是值类型(Value Type),而不是引用类型(Reference Type),这使得它更适合传递和管理简单的数据对象。

创建Swift Struct

要创建一个Swift Struct,你需要使用struct关键字定义结构体的名称和属性。下面是一个简单的Swift Struct例子:

struct Person {
   var name: String
   var age: Int
   var email: String?
}

这个例子定义了一个表示人的数据类型,其中包括一个名字、一个年龄和一个可选的电子邮件地址。要创建一个Person对象,只需创建一个新的Person结构,并设置相应的属性:

var john = Person(name: "John", age: 30, email: "john@example.com")

这会创建一个新的Person实例,其中包含三个属性:name,age和email。我们可以使用点语法访问这些属性:

print(john.name) // 输出 "John"
Swift Struct的属性类型

Swift Struct的属性类型可以包括Swift基本数据类型、Swift Struct、Swift Enum等。下面是一个Swift Struct例子,其中包含一个引用了另一个Swift Struct实例的属性:

struct Address {
   var street: String
   var city: String
   var zipCode: String
}

struct Person {
   var name: String
   var age: Int
   var email: String?
   var address: Address
}

在这个例子中,Person结构包含一个引用了另一个Swift Struct实例的属性。对于这种类型的属性,你可以使用点语法来访问嵌套结构内部的属性:

let john = Person(name: "John", age: 30, email: "john@example.com", address: Address(street: "123 Main St", city: "San Francisco", zipCode: "94105"))
print(john.address.city) // 输出 "San Francisco"
Swift Struct的方法

类(Class)不同于Swift Struct的一个重要区别就在于,类(Class)可以包含方法(Method),但Swift Struct不能包含类方法。Swift Struct只能包含实例方法(Instance Method),这些方法可以访问和修改Swift Struct实例中的属性。下面是一个计算Person结构的年龄的例子,其中包括一个名为calculateAge的实例方法:

struct Person {
    var name: String
    var birthYear: Int
    
    func calculateAge(currentYear: Int) -> Int {
        return currentYear - self.birthYear
    }
}

要调用实例方法,只需使用结构的变量名并调用方法名称,以及提供必要的参数:

let john = Person(name: "John", birthYear: 1990)
let currentYear = 2021
let age = john.calculateAge(currentYear: currentYear)
print("\(john.name) is \(age) years old.")

这将输出 “John is 31 years old.”。

Swift Struct的mutating方法

Swift Struct中的方法也可能需要修改Swift结构的实例。在这种情况下,我们需要使用mutating关键字来改变结构体的属性。下面是一个将人的年龄增加一岁的例子,其中包括一个名为updateAge的mutating方法:

struct Person {
    var name: String
    var age: Int
    
    mutating func updateAge() {
        self.age += 1
    }
}

要调用这个方法,只需使用结构的变量名并调用方法名称:

var john = Person(name: "John", age: 30)
john.updateAge()
print(john.age) // 输出 "31"

在这个例子中,我们使用了变量关键字var来声明Person实例john。由于updateAge方法需要修改john实例的属性,因此我们需要使用可变实例来调用这个方法。

总结

Swift Struct是Swift编程语言中的一个特殊的数据类型。相比于类(Class),Swift Struct更轻量级,因为它是值类型(Value Type),而不是引用类型(Reference Type)。Swift Struct数据类型可以引用其他Swift Struct实例或其他类型的变量。Swift Struct还允许在数据类型中定义实例方法及mutating方法,以便修改Swift Struct实例的属性。