Swift capture

123
Swift Closures Capture Sai Li @ Swift Taipei. 2016/11/1

Transcript of Swift capture

Page 1: Swift capture

Swift Closures CaptureSai Li @ Swift Taipei.

2016/11/1

Page 2: Swift capture

• Closures Capture Semanticsby Olivier Halligon

• Swift ( ) by John Lin @johnlinvc

• Memory Management by Barry

Page 3: Swift capture
Page 4: Swift capture
Page 5: Swift capture

class Pokemon

Page 6: Swift capture

delay()

Page 7: Swift capture

delay()

Swift 3

Page 8: Swift capture

demo1

Page 9: Swift capture

demo1

Page 10: Swift capture

demo1

Page 11: Swift capture

demo1

Page 12: Swift capture

demo1

Page 13: Swift capture

demo1

Page 14: Swift capture

demo1

Page 15: Swift capture

demo1

Page 16: Swift capture

demo1

Page 17: Swift capture

demo1

Page 18: Swift capture

demo1

Page 19: Swift capture

Capture

Page 20: Swift capture

Capture

Page 21: Swift capture

Swift Capture 1.

captured variables are evaluated at the closure execution’s time

Page 22: Swift capture

demo2()

Page 23: Swift capture
Page 24: Swift capture
Page 25: Swift capture
Page 26: Swift capture
Page 27: Swift capture
Page 28: Swift capture
Page 29: Swift capture
Page 30: Swift capture
Page 31: Swift capture
Page 32: Swift capture
Page 33: Swift capture
Page 34: Swift capture
Page 35: Swift capture
Page 36: Swift capture
Page 37: Swift capture

Swift Capture 2.

Swift captures variables by reference by default

Page 38: Swift capture

demo3()

Page 39: Swift capture

demo3()

Page 40: Swift capture
Page 41: Swift capture
Page 42: Swift capture

Swift Capture 3.

Swift use capture list to capture variables at closure creation

Page 43: Swift capture
Page 44: Swift capture
Page 45: Swift capture
Page 46: Swift capture
Page 47: Swift capture
Page 48: Swift capture
Page 49: Swift capture
Page 50: Swift capture
Page 51: Swift capture
Page 52: Swift capture
Page 53: Swift capture
Page 54: Swift capture
Page 55: Swift capture
Page 56: Swift capture
Page 57: Swift capture
Page 58: Swift capture
Page 59: Swift capture
Page 60: Swift capture

1. Pikachu created

Page 61: Swift capture

1. Pikachu created2. Captured by closure as a copy

Page 62: Swift capture

1. Pikachu created2. Captured by closure as a copy3. assign pokemon to Charmander,

Pikachu retained by closure

Page 63: Swift capture

1. Pikachu created2. Captured by closure as a copy3. assign pokemon to Charmander,

Pikachu retained by closure4. leave demo6(), Charmander(pokemon) released

Page 64: Swift capture

1. Pikachu created2. Captured by closure as a copy3. assign pokemon to Charmander,

Pikachu retained by closure4. leave demo6(), Charmander(pokemon) released5. closure execute, print “Pikachu”, capture by closure

Page 65: Swift capture

1. Pikachu created2. Captured by closure as a copy3. assign pokemon to Charmander,

Pikachu retained by closure4. leave demo6(), Charmander(pokemon) released5. closure execute, print “Pikachu”, capture by closure6. closure released by GCD

Page 66: Swift capture
Page 67: Swift capture

1. Pikachu created

Page 68: Swift capture

1. Pikachu created2. closure a reference to pokemon, not value(Pikachu)

Page 69: Swift capture

1. Pikachu created2. closure a reference to pokemon, not value(Pikachu)3. pokemon was assigned to Charmander,

Pikachu was release(no strong reference)

Page 70: Swift capture

1. Pikachu created2. closure a reference to pokemon, not value(Pikachu)3. pokemon was assigned to Charmander,

Pikachu was release(no strong reference)4. pokemon variable was referenced by the closure

Page 71: Swift capture

1. Pikachu created2. closure a reference to pokemon, not value(Pikachu)3. pokemon was assigned to Charmander,

Pikachu was release(no strong reference)4. pokemon variable was referenced by the closure 5. pokemon release by GCD

Page 72: Swift capture
Page 73: Swift capture
Page 74: Swift capture
Page 75: Swift capture
Page 76: Swift capture
Page 77: Swift capture
Page 78: Swift capture
Page 79: Swift capture
Page 80: Swift capture
Page 81: Swift capture
Page 82: Swift capture
Page 83: Swift capture
Page 84: Swift capture
Page 85: Swift capture
Page 86: Swift capture
Page 87: Swift capture
Page 88: Swift capture
Page 89: Swift capture
Page 90: Swift capture
Page 91: Swift capture
Page 92: Swift capture
Page 93: Swift capture
Page 94: Swift capture
Page 95: Swift capture
Page 96: Swift capture
Page 97: Swift capture
Page 98: Swift capture
Page 99: Swift capture
Page 100: Swift capture
Page 101: Swift capture
Page 102: Swift capture
Page 103: Swift capture
Page 104: Swift capture
Page 105: Swift capture
Page 106: Swift capture
Page 107: Swift capture
Page 108: Swift capture
Page 109: Swift capture
Page 110: Swift capture

Conclusion

Page 111: Swift capture

Conclusion1. Capture a reference to the outer variables that

you use inside the closure

Page 112: Swift capture

Conclusion1. Capture a reference to the outer variables that

you use inside the closure

2. Evaluated when the closure gets executed.

Page 113: Swift capture

Conclusion1. Capture a reference to the outer variables that

you use inside the closure

2. Evaluated when the closure gets executed.

3. You can modify the variable’s value in the closure (if that variable is declared as var)

Page 114: Swift capture

Conclusion1. Capture a reference to the outer variables that

you use inside the closure

2. Evaluated when the closure gets executed.

3. You can modify the variable’s value in the closure (if that variable is declared as var)

4. You can instead tell Swift to evaluate a variable at the point of the closure creation and store that value in a local constant, instead of capturing the variable itself. You do that using capture lists expressed inside brackets.

Page 115: Swift capture

Q & A

Page 116: Swift capture

One more thing

Page 117: Swift capture
Page 118: Swift capture
Page 119: Swift capture

• iOS Developer

• Ops

• Backend

Recruitment

Page 120: Swift capture

• iOS App

• Swift

• RESTful API

• Bonus

• Storyboard Auto-layout

• Git • Objective-C • CocoaPods or Carthage

iOS

Page 121: Swift capture

• : • Linux • shell script python • VM Docker AWS • • CPU • • nginx nodejs mongodb • CI CD jenkins • • TDD

• • 1. • 2. • 3.

Ops

Page 122: Swift capture

• 1. Server API (RESTful) (javascript)

• 2. (NoSQL)schema

• 4.Linux environment

• 5. Node.js + Express + MongoDB + mongoose

• javascript object oriented programming

• Linux

• node.js express.js mongoose, mongodb

• RESTful API

• JSON

• Git

Backend

Page 123: Swift capture

• http://alisoftware.github.io/swift/closures/2016/07/25/closure-capture-1/

• Swift ( ) by johnlinvc

• http://img.gawkerassets.com/img/198dkaqba04b6png/original.png

• http://cartoonbros.com/wp-content/uploads/2016/08/pikachu-5.png

• http://vectorlogo4u.com/wp-content/uploads/2016/08/chramander-vector-high-res.png

• http://cdn.bulbagarden.net/upload/thumb/7/78/150Mewtwo.png/250px-150Mewtwo.png

• http://cdn.bulbagarden.net/upload/thumb/3/39/007Squirtle.png/250px-007Squirtle.png

References