struct vs class in swift

28
STRUCT vs CLASS Laurentiu Ungur, iOS Developer @P3-Digital Services

Upload: ungur-laurentiu-nicolae

Post on 22-Jan-2018

124 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Struct vs Class in Swift

STRUCT vs CLASS

Laurentiu Ungur, iOS Developer @P3-Digital Services

Page 2: Struct vs Class in Swift

Why I should use a struct instead of a class ?

Page 3: Struct vs Class in Swift

1. POWERFUL

Page 4: Struct vs Class in Swift

PROBLEM WITH SUBCLASSING ?

Page 5: Struct vs Class in Swift

struct Vehicle {let model: Stringlet price: Double

}

Page 6: Struct vs Class in Swift

enum VehicleType {case car(licensePlate: String)case bicycle(chainRings: Int)

}

Page 7: Struct vs Class in Swift

struct Vehicle {let model: Stringlet price: Double

let type: VehicleType }

Page 8: Struct vs Class in Swift

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

2. VALUE SEMANTICS

Page 10: Struct vs Class in Swift

3. AUTOMATIC INITIALIZER

Page 11: Struct vs Class in Swift

struct Car {let brand: Stringlet model: Stringlet price: Double

}

Page 12: Struct vs Class in Swift

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

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

4. SPEED

Page 15: Struct vs Class in Swift

40xFaster

Swift 1

github.com/knguyen2708/StructVsClassPerformance

Page 16: Struct vs Class in Swift

37 000 000xFaster

Swift 2 - Whole Module Optimization

github.com/knguyen2708/StructVsClassPerformance

Page 17: Struct vs Class in Swift

14 000 000xFaster

Swift 3 - Whole Module Optimization

github.com/knguyen2708/StructVsClassPerformance

Page 18: Struct vs Class in Swift

Use final keyword

Page 19: Struct vs Class in Swift

unsplash.com/collections/328902/cow

Page 20: Struct vs Class in Swift

COW (Copy-On-Write)

Page 21: Struct vs Class in Swift

let a = [1, 2, 3]

var b = a // not copied

b.append(4) // now it’s copied

Page 22: Struct vs Class in Swift

When I should use a struct ?● The data will be used in code across multiple

threads

Page 23: Struct vs Class in Swift

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

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

When I should use a class ?● You want to create shared, mutable state

Page 26: Struct vs Class in Swift

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

Still undecided ?

Design with struct as default,

fallback to class if it’s really needed.

Page 28: Struct vs Class in Swift

THANKS !