Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
@gregheo SLUG August 2018 Everything The least you need to know about hashing in Swift (including Swift 4.2!) @gregheo {
Slide 2
Slide 2 text
@gregheo SLUG August 2018 extension Puppy { }
Slide 3
Slide 3 text
@gregheo SLUG August 2018 extension Puppy: Hashable { } { return 0 } var hashValue: Int
Slide 4
Slide 4 text
@gregheo SLUG August 2018 What is a hash? What are hash values used for? How do I calculate good hash values?
Slide 5
Slide 5 text
@gregheo SLUG August 2018 0 1 2 3 4 5 6 7 8 9 …
Slide 6
Slide 6 text
@gregheo SLUG August 2018 0 1 2 3 4 5 6 7 8 9 …
Slide 7
Slide 7 text
@gregheo SLUG August 2018
Slide 8
Slide 8 text
@gregheo SLUG August 2018
Slide 9
Slide 9 text
@gregheo SLUG August 2018 var hashValue: Int
Slide 10
Slide 10 text
@gregheo SLUG August 2018 Int data hash function
Slide 11
Slide 11 text
@gregheo SLUG August 2018 == hash hash == *
Slide 12
Slide 12 text
@gregheo SLUG August 2018 != hash hash != hash hash == possible!
Slide 13
Slide 13 text
@gregheo SLUG August 2018 Int data hash function
Slide 14
Slide 14 text
@gregheo SLUG August 2018 Int data hash function
Slide 15
Slide 15 text
@gregheo SLUG August 2018 != hash hash !=
Slide 16
Slide 16 text
@gregheo SLUG August 2018 hash hash == ==
Slide 17
Slide 17 text
@gregheo SLUG August 2018 == hash hash == hash hash != !=
Slide 18
Slide 18 text
@gregheo SLUG August 2018 extension Puppy: Hashable { } { return 0 } var hashValue: Int
Slide 19
Slide 19 text
@gregheo SLUG August 2018
Slide 20
Slide 20 text
@gregheo SLUG August 2018 0 1 2 3 4 5 6 7 8 9 …
Slide 21
Slide 21 text
@gregheo SLUG August 2018 extension Puppy: Hashable { var hashValue: Int { return 0 } }
Slide 22
Slide 22 text
@gregheo SLUG August 2018 extension Puppy: Hashable { var hashValue: Int { return Int(arc4random_uniform(1000)) } }
Slide 23
Slide 23 text
@gregheo SLUG August 2018 var hashValue: Int { return age.hashValue ^ name.hashValue }
Slide 24
Slide 24 text
@gregheo SLUG August 2018 struct Puppy: Hashable { let name: String let age: Int } struct RedPanda: Hashable { let name: String let sequence: Int }
Slide 25
Slide 25 text
@gregheo SLUG August 2018 let p1 = Puppy(name: "Boba", age: 8) let p2 = RedPanda(name: "Boba", sequence: 8) p1.hashValue p2.hashValue // 7824938159186139988 // 7824938159186139988
Slide 26
Slide 26 text
@gregheo SLUG August 2018 var hashValue: Int { return age.hashValue ^ name.hashValue ^ “Puppy”.hashValue }
Slide 27
Slide 27 text
@gregheo SLUG August 2018 func hash(into hasher: inout Hasher) { hasher.combine(age) hasher.combine(name) } N E W !
Slide 28
Slide 28 text
@gregheo SLUG August 2018 struct Puppy: Hashable { let name: String let age: Int }
Slide 29
Slide 29 text
@gregheo SLUG August 2018 What is a hash? What are hash values used for? How do I calculate good hash values?
Slide 30
Slide 30 text
@gregheo SLUG August 2018 swiftunboxed.com/protocols/hashable/ }