In Swift, structs (short for structures) are a fundamental building block for creating custom data types. They allow you to encapsulate related properties and behaviors into a single, cohesive unit.
Defining a struct in Swift is straightforward. Simply use the struct
keyword followed by its name and a pair of curly braces. Inside the braces, you can declare properties and methods:
struct Person {
var name: String
var age: Int
func greet() {
print("Hello, my name is \(name) and I am \(age) years old.")
}
}
In the example above, we define a Person
struct with two properties: name
and age
, and a method called greet
.
Swift automatically generates an initializer for structs that takes parameters for each property:
let person = Person(name: "John", age: 25)
person.greet() // Output: Hello, my name is John and I am 25 years old.
Memberwise initializers are particularly useful when working with structs, as they save you the hassle of writing boilerplate initialization code:
struct Car {
var make: String
var model: String
var year: Int
}
let car = Car(make: "Tesla", model: "Model S", year: 2023)
print(car.model) // Output: Model S
By default, methods in a struct cannot modify properties of the instance. To allow a method to do so, you must mark it as mutating
:
struct Counter {
var value: Int
mutating func increment() {
value += 1
}
}
var counter = Counter(value: 0)
counter.increment()
print(counter.value) // Output: 1
Structs in Swift are value types, meaning they are copied when they are assigned to a new variable or passed to a function:
struct Point {
var x: Int
var y: Int
}
var point1 = Point(x: 0, y: 0)
var point2 = point1
point2.x = 10
print(point1.x) // Output: 0
print(point2.x) // Output: 10
In the example above, changing point2
does not affect point1
because they are distinct copies.
Swift structs are ideal when you need a simple, lightweight datatype that benefits from value semantics. Common use cases include representing geometric points, dates, and sizes, among others. If you require reference semantics, consider using a class instead.
Structs in Swift provide a robust way to model data with inherent value semantics and concise syntax. Whether you're developing a simple app or a complex software system, leveraging structs can enhance your code's readability and maintainability.
```