Swift Structs Tutorial
View more Tutorials:
In Swift, Struct (structure) is a special type of value, it creates a variable, to store multiple values, but the values are related to each other.
For example, information about an employee include:
- Employee number
- Employee name
- Position
You can create 3 variables to store the information above of employee. However you can create a Struct to store all three information on in a single variable.
Swift uses struct keyword to declare a Struct.
Employee.swift
import Foundation struct Employee { var empNumber:String var empName:String var position:String // Constructor. init(empNumber:String, empName:String, position:String) { self.empNumber = empNumber; self.empName = empName; self.position = position; } }
For example, use Struct:
EmployeeTest.swift
import Foundation func test_EmployeeStruct() { // Create a variable from Employee struct let john = Employee(empNumber:"E01",empName: "John",position: "CLERK") print("Emp Number: " + john.empNumber) print("Emp Name: " + john.empName) print("Emp Position: " + john.position) }
Edit main.swift:
main.swift
import Foundation test_EmployeeStruct()
Running the example:

Struct is commonly used to create an object to store the value, while the class is using more diversely.
- Struct does not allow inheritance from a class or another struct.
- But Struct allows inheritance from one or more Protocol.
If struct appears as a parameter in a function (or method), it is passed as a value. Meanwhile, if the instance of a class appears as a parameter in a function (or method) it is passed as a reference.

StructVsClass.swift
import Foundation // A class class MyClass { var name: String = "Abc" } // A struct struct MyStruct { var name: String = "Abc" } // A function, 2 parameters // First parameter is a class, and second parameter is a struct. func passToMe( myClass: MyClass, myStruct: MyStruct) { // Change value to 'name' field. myClass.name = "New Name" // Can not change value to field of this struct. // (It is a copy,its fields become constants and can not be changed. // myStruct.name = "New Name" *** } func test_passToMe() { // An object of MyClass. var mc = MyClass() print("mc.name = \(mc.name)") // Abc // A value of MyStruct. var ms = MyStruct() print("Call passToMe function") // Pass to passToMe() function. // Note: The first parameter does not require a Label. passToMe( mc, myStruct: ms) print("mc.name = \(mc.name)") // New Name }
Running the example:

Struct can have Constructors but do not have Destructor
Here are few notes for the Constructor:
- You can write one or more constructor for struct.
- In the constructor you must assign values to all fields that don't have value.

Struct can have methods and properties.
Book.swift
import Foundation struct Book { // Property var title:String { get { return self.title; } set (value) { self.title = value } } // Property var author:String { get { return self.author; } set(value) { self.author = value; } } // Constructor. init( title:String, author:String) { self.title = title; self.author = author; } // Method. func getInfo() -> String { return "Book Title: " + self.title + ", Author: " + self.author; } }
See more about properties at:
- TODO: LINK??
Struct can inherit from one or more Protocols.
- TODO: