Struct vs Class in Swift
-
Upload
ungur-laurentiu-nicolae -
Category
Software
-
view
127 -
download
1
Transcript of Struct vs Class in Swift
![Page 1: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/1.jpg)
STRUCT vs CLASS
Laurentiu Ungur, iOS Developer @P3-Digital Services
![Page 2: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/2.jpg)
Why I should use a struct instead of a class ?
![Page 3: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/3.jpg)
1. POWERFUL
![Page 4: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/4.jpg)
PROBLEM WITH SUBCLASSING ?
![Page 5: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/5.jpg)
struct Vehicle {let model: Stringlet price: Double
}
![Page 6: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/6.jpg)
enum VehicleType {case car(licensePlate: String)case bicycle(chainRings: Int)
}
![Page 7: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/7.jpg)
struct Vehicle {let model: Stringlet price: Double
let type: VehicleType }
![Page 8: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/8.jpg)
let car = Vehicle(model: “X”, price: 200, type: .car(licensePlate: “CJ”))
let bicycle = Vehicle(model: “A”, price: 10, type: .bicycle(chainRings: 100))
![Page 9: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/9.jpg)
2. VALUE SEMANTICS
![Page 10: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/10.jpg)
3. AUTOMATIC INITIALIZER
![Page 11: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/11.jpg)
struct Car {let brand: Stringlet model: Stringlet price: Double
}
![Page 12: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/12.jpg)
struct Car {let brand: Stringlet model: Stringlet price: Double
init(brand: String, model: String, price: Double) {self.brand = brandself.model = modelself.price = price
}}
let myCar = Car(brand: “Tesla”, model: “S”, price: 100)
![Page 13: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/13.jpg)
struct Car {let brand: Stringlet model: Stringlet price: Double
}
let myCar = Car(brand: “Tesla”, model: “S”, price: 100)
![Page 14: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/14.jpg)
4. SPEED
![Page 15: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/15.jpg)
40xFaster
Swift 1
github.com/knguyen2708/StructVsClassPerformance
![Page 16: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/16.jpg)
37 000 000xFaster
Swift 2 - Whole Module Optimization
github.com/knguyen2708/StructVsClassPerformance
![Page 17: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/17.jpg)
14 000 000xFaster
Swift 3 - Whole Module Optimization
github.com/knguyen2708/StructVsClassPerformance
![Page 18: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/18.jpg)
Use final keyword
![Page 19: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/19.jpg)
unsplash.com/collections/328902/cow
![Page 20: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/20.jpg)
COW (Copy-On-Write)
![Page 21: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/21.jpg)
let a = [1, 2, 3]
var b = a // not copied
b.append(4) // now it’s copied
![Page 22: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/22.jpg)
When I should use a struct ?● The data will be used in code across multiple
threads
![Page 23: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/23.jpg)
When I should use a struct ?● The data will be used in code across multiple
threads● Copies should have independent state
![Page 24: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/24.jpg)
When I should use a struct ?● The data will be used in code across multiple
threads● Copies should have independent state● Encapsulates a few relatively simply data
values
![Page 25: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/25.jpg)
When I should use a class ?● You want to create shared, mutable state
![Page 26: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/26.jpg)
When I should use a class ?● You want to create shared, mutable state● You want to create complex frameworks like
Cocoa or Cocoa Touch
![Page 27: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/27.jpg)
Still undecided ?
Design with struct as default,
fallback to class if it’s really needed.
![Page 28: Struct vs Class in Swift](https://reader033.fdocuments.net/reader033/viewer/2022051507/58ee0d231a28ab897a8b459d/html5/thumbnails/28.jpg)
THANKS !