import SwiftUI
struct PersonStruct {
var name: String
}
class PersonClass {
var name: String
init(name: String) {
self.name = name
}
}
struct StructsVsClassesDemo: View {
@State private var originalStruct = PersonStruct(name: "Alice")
@State private var copyStruct = PersonStruct(name: "Alice")
@State private var originalClass = PersonClass(name: "Bob")
@State private var copyClass = PersonClass(name: "Bob")
var body: some View {
VStack(spacing: 20) {
Text("Structs vs Classes Demo")
.font(.headline)
VStack(alignment: .leading) {
Text("Original Struct Name:")
Text(originalStruct.name)
.padding(.bottom, 5)
Text("Copy Struct Name:")
Text(copyStruct.name)
}
VStack(alignment: .leading) {
Text("Original Class Name:")
Text(originalClass.name)
.padding(.bottom, 5)
Text("Copy Class Name:")
Text(copyClass.name)
}
Button("Change Copy Names") {
copyStruct.name = "Charlie"
copyClass.name = "Dave"
// originalStruct.name stays "Alice" because structs are value types
// originalClass.name changes to "Dave" because classes are reference types
// originalClass and copyClass refer to different instances, so originalClass.name does not change automatically
// To show the effect, assign originalClass = copyClass to share the reference
originalClass = copyClass
}
.padding()
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(8)
Spacer()
}
.padding()
}
}
struct StructsVsClassesDemo_Previews: PreviewProvider {
static var previews: some View {
StructsVsClassesDemo()
}
}We created a struct PersonStruct and a class PersonClass both with a name property.
We keep two copies of each: original and copy.
When the button is tapped, we change the copy struct's name to "Charlie" and the copy class's name to "Dave".
Because structs are value types, changing the copy struct does not affect the original struct, so originalStruct.name stays "Alice".
Because classes are reference types, changing the copy class also changes the original class's name to "Dave". We assign originalClass = copyClass to reflect this shared reference.
This shows the key difference: structs copy data, classes share references.