Swift capture
-
Upload
chihyang-li -
Category
Software
-
view
68 -
download
0
Transcript of Swift capture
![Page 1: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/1.jpg)
Swift Closures CaptureSai Li @ Swift Taipei.
2016/11/1
![Page 2: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/2.jpg)
• Closures Capture Semanticsby Olivier Halligon
• Swift ( ) by John Lin @johnlinvc
• Memory Management by Barry
![Page 3: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/3.jpg)
![Page 4: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/4.jpg)
![Page 5: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/5.jpg)
class Pokemon
![Page 6: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/6.jpg)
delay()
![Page 7: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/7.jpg)
delay()
Swift 3
![Page 8: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/8.jpg)
demo1
![Page 9: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/9.jpg)
demo1
![Page 10: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/10.jpg)
demo1
![Page 11: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/11.jpg)
demo1
![Page 12: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/12.jpg)
demo1
![Page 13: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/13.jpg)
demo1
![Page 14: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/14.jpg)
demo1
![Page 15: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/15.jpg)
demo1
![Page 16: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/16.jpg)
demo1
![Page 17: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/17.jpg)
demo1
![Page 18: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/18.jpg)
demo1
![Page 19: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/19.jpg)
Capture
![Page 20: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/20.jpg)
Capture
![Page 21: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/21.jpg)
Swift Capture 1.
captured variables are evaluated at the closure execution’s time
![Page 22: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/22.jpg)
demo2()
![Page 23: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/23.jpg)
![Page 24: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/24.jpg)
![Page 25: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/25.jpg)
![Page 26: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/26.jpg)
![Page 27: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/27.jpg)
![Page 28: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/28.jpg)
![Page 29: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/29.jpg)
![Page 30: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/30.jpg)
![Page 31: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/31.jpg)
![Page 32: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/32.jpg)
![Page 33: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/33.jpg)
![Page 34: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/34.jpg)
![Page 35: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/35.jpg)
![Page 36: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/36.jpg)
![Page 37: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/37.jpg)
Swift Capture 2.
Swift captures variables by reference by default
![Page 38: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/38.jpg)
demo3()
![Page 39: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/39.jpg)
demo3()
![Page 40: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/40.jpg)
![Page 41: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/41.jpg)
![Page 42: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/42.jpg)
Swift Capture 3.
Swift use capture list to capture variables at closure creation
![Page 43: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/43.jpg)
![Page 44: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/44.jpg)
![Page 45: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/45.jpg)
![Page 46: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/46.jpg)
![Page 47: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/47.jpg)
![Page 48: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/48.jpg)
![Page 49: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/49.jpg)
![Page 50: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/50.jpg)
![Page 51: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/51.jpg)
![Page 52: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/52.jpg)
![Page 53: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/53.jpg)
![Page 54: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/54.jpg)
![Page 55: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/55.jpg)
![Page 56: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/56.jpg)
![Page 57: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/57.jpg)
![Page 58: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/58.jpg)
![Page 59: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/59.jpg)
![Page 60: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/60.jpg)
1. Pikachu created
![Page 61: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/61.jpg)
1. Pikachu created2. Captured by closure as a copy
![Page 62: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/62.jpg)
1. Pikachu created2. Captured by closure as a copy3. assign pokemon to Charmander,
Pikachu retained by closure
![Page 63: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/63.jpg)
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](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/64.jpg)
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](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/65.jpg)
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](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/66.jpg)
![Page 67: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/67.jpg)
1. Pikachu created
![Page 68: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/68.jpg)
1. Pikachu created2. closure a reference to pokemon, not value(Pikachu)
![Page 69: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/69.jpg)
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](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/70.jpg)
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](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/71.jpg)
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](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/72.jpg)
![Page 73: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/73.jpg)
![Page 74: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/74.jpg)
![Page 75: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/75.jpg)
![Page 76: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/76.jpg)
![Page 77: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/77.jpg)
![Page 78: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/78.jpg)
![Page 79: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/79.jpg)
![Page 80: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/80.jpg)
![Page 81: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/81.jpg)
![Page 82: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/82.jpg)
![Page 83: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/83.jpg)
![Page 84: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/84.jpg)
![Page 85: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/85.jpg)
![Page 86: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/86.jpg)
![Page 87: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/87.jpg)
![Page 88: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/88.jpg)
![Page 89: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/89.jpg)
![Page 90: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/90.jpg)
![Page 91: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/91.jpg)
![Page 92: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/92.jpg)
![Page 93: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/93.jpg)
![Page 94: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/94.jpg)
![Page 95: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/95.jpg)
![Page 96: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/96.jpg)
![Page 97: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/97.jpg)
![Page 98: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/98.jpg)
![Page 99: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/99.jpg)
![Page 100: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/100.jpg)
![Page 101: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/101.jpg)
![Page 102: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/102.jpg)
![Page 103: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/103.jpg)
![Page 104: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/104.jpg)
![Page 105: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/105.jpg)
![Page 106: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/106.jpg)
![Page 107: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/107.jpg)
![Page 108: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/108.jpg)
![Page 109: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/109.jpg)
![Page 110: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/110.jpg)
Conclusion
![Page 111: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/111.jpg)
Conclusion1. Capture a reference to the outer variables that
you use inside the closure
![Page 112: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/112.jpg)
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](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/113.jpg)
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](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/114.jpg)
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](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/115.jpg)
Q & A
![Page 116: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/116.jpg)
One more thing
![Page 117: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/117.jpg)
![Page 118: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/118.jpg)
![Page 119: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/119.jpg)
• iOS Developer
• Ops
• Backend
Recruitment
![Page 120: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/120.jpg)
• iOS App
• Swift
• RESTful API
• Bonus
• Storyboard Auto-layout
• Git • Objective-C • CocoaPods or Carthage
iOS
![Page 121: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/121.jpg)
• : • Linux • shell script python • VM Docker AWS • • CPU • • nginx nodejs mongodb • CI CD jenkins • • TDD
• • 1. • 2. • 3.
Ops
![Page 122: Swift capture](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/122.jpg)
•
• 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](https://reader031.fdocuments.in/reader031/viewer/2022022203/58735cab1a28abe7648b4c11/html5/thumbnails/123.jpg)
• 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