class vs struct

26
class or struct?

Transcript of class vs struct

class or struct?

Daniel Carlos

🔸 Cascavel - Ceará

🔸 Sistemas e Mídias Digitais - UFC

🔸 3+ years - Mobile Development

🔸 iOS Developer - HE:labs

struct !

🔸 Immutability

🔸 Member Initializer

🔸 Pass by value

struct - benefits

Immutability

🔸 Easier to implement

🔸 Easier to understand

struct

Immutability

class User { var name: String init(name:String) {self.name = name} }

class version

let user = User(name: "Daniel Carlos")

user.name = "Carlos Daniel"

Immutability

class User { let name: String init(name:String) {self.name = name} }

class version

class MutableUser { var name: String init(name:String) {self.name = name} }

Immutability

struct User { var name: String }

struct version

let user = User(name: "Daniel Carlos")

user.name = "Carlos Daniel"

struct - benefits

🔸 Immutability

🔸 Member Initializer

🔸 Pass by value

Member Initializer

struct User { var username: String var password: String }

User(username: "Joao", password: "Backwards321")

struct - benefits

🔸 Immutability

🔸 Member Initializer

🔸 Pass by value

Pass by value

Pass by referenceside effect

ActorsVCactors: NSMutableArray

MovieVC

Pass by referenceside effect

ActorsVC

numberOfRows

ActorsVC

cellForIndexPathMovieVC

actors.remove(0)

When to use struct?

struct

🔶 Represents Value

🔶 using == makes sense

🔶 no behavior

Value Type

Only for simple model types

Value Type

Only for simple model typesX

Beyond model layer

class FavoriteVC: UIViewController { var favoriteMovies = [String]() var favoriteActor: String! }

Beyond model layer

struct FavoriteModel { var favoriteActor: String var favoriteMovies: String }

class FavoriteVC: UIViewController { var model: FavoriteModel! }

When to use class?

class

🔶 Inheritance

🔶 Behavior

🔶 Register itself as delegate

🔶 To model real-world objects

Conclusion

🔶 It’s not just changing form ‘class’ to ‘struct’

🔶 Let’s try to use struct beyond model

🔶 Swift is evolving. We should too!

References

🔶 Protocol and Value Oriented Programming in UIKit Apps https://developer.apple.com/videos/play/wwdc2016/419/

🔶 A Warm Welcome to Structs and Value Types https://www.objc.io/issues/16-swift/swift-classes-vs-structs/

Say ‘hi’!

/danielcarlosce

/danielcarlosbr

@danielcarlosce

Thank you!