ݺߣ

ݺߣShare a Scribd company logo
ɾڳ٤ȥ
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
??
?
?
?
??
?
?
?
??
?
?
??
?
?
?
??
?
?
??
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
struct ValueType {
var value = 1
}
let obj1 = ValueType()
var obj2 = obj1
obj2.value = 2
print(obj1.value) // 1
?
struct ValueType {
var value = 1
}
let obj1 = ValueType()
var obj2 = obj1
obj2.value = 2
print(obj1.value) // 1
obj1 1
?
struct ValueType {
var value = 1
}
let obj1 = ValueType()
var obj2 = obj1
obj2.value = 2
print(obj1.value) // 1
obj1 1
obj2 1
?
struct ValueType {
var value = 1
}
let obj1 = ValueType()
var obj2 = obj1
obj2.value = 2
print(obj1.value) // 1
obj1 1
obj2 2
?
?
?
?
class ReferenceType {
var value = 1
}
let obj1 = ReferenceType()
let obj2 = obj1
obj2.value = 2
print(obj1.value) // 2
?
class ReferenceType {
var value = 1
}
let obj1 = ReferenceType()
let obj2 = obj1
obj2.value = 2
print(obj1.value) // 2
?
instance
1
class ReferenceType {
var value = 1
}
let obj1 = ReferenceType()
let obj2 = obj1
obj2.value = 2
print(obj1.value) // 2
?
obj1
instance
1
class ReferenceType {
var value = 1
}
let obj1 = ReferenceType()
let obj2 = obj1
obj2.value = 2
print(obj1.value) // 2
?
obj1
obj2
instance
1
class ReferenceType {
var value = 1
}
let obj1 = ReferenceType()
let obj2 = obj1
obj2.value = 2
print(obj1.value) // 2
?
obj1
obj2
instance
1
class ReferenceType {
var value = 1
}
let obj1 = ReferenceType()
let obj2 = obj1
obj2.value = 2
print(obj1.value) // 2
?
obj1
obj2
instance
2
class ReferenceType {
var value = 1
}
let obj1 = ReferenceType()
let obj2 = obj1
obj2.value = 2
print(obj1.value) // 2
?
obj1
obj2
instance
2
class ReferenceType {
var value = 1
}
let obj1 = ReferenceType()
let obj2 = obj1
obj2.value = 2
print(obj1.value) // 2
?
obj1
obj2
instance
2
?
?
?
?
?
?
?
?
?
?
?
?
class ReferenceType {
var value = 1
}
let obj1 = ReferenceType()
let obj2 = obj1
obj2.value = 2
print(obj1.value) // 2
?
obj1
obj2
instance
2
class ReferenceType {
var value = 1
}
let obj1 = ReferenceType()
let obj2 = obj1
obj2.value = 2
print(obj1.value) // 2
?
obj1
obj2
instance
2
class ReferenceType {
var value = 1
}
let obj1 = ReferenceType()
let obj2 = obj1
obj2.value = 2
print(obj1.value) // 2
?
obj1
obj2
instance
2
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
class Chicken {
var egg: Egg!
}
class Egg {
var parent: Chicken!
}
let ? = Chicken()
let ? = Egg()
?.egg = ?
?.parent = ?
?
class Chicken {
var egg: Egg!
}
class Egg {
var parent: Chicken!
}
let ? = Chicken()
let ? = Egg()
?.egg = ?
?.parent = ?
?
egg
?
class Chicken {
var egg: Egg!
}
class Egg {
var parent: Chicken!
}
let ? = Chicken()
let ? = Egg()
?.egg = ?
?.parent = ?
?
parent
?
egg
?
class Chicken {
var egg: Egg!
}
class Egg {
var parent: Chicken!
}
let ? = Chicken()
let ? = Egg()
?.egg = ?
?.parent = ?
?
parent
?
egg
?
class Chicken {
var egg: Egg!
}
class Egg {
var parent: Chicken!
}
let ? = Chicken()
let ? = Egg()
?.egg = ?
?.parent = ?
?
parent
?
egg
?
class Chicken {
var egg: Egg!
}
class Egg {
var parent: Chicken!
}
let ? = Chicken()
let ? = Egg()
?.egg = ?
?.parent = ?
?
parent
?
egg
?
class Chicken {
var egg: Egg!
}
class Egg {
var parent: Chicken!
}
let ? = Chicken()
let ? = Egg()
?.egg = ?
?.parent = ?
?
parent
?
egg
?
class Chicken {
var egg: Egg!
}
class Egg {
var parent: Chicken!
}
let ? = Chicken()
let ? = Egg()
?.egg = ?
?.parent = ?
?
parent
?
egg
?
?
?
?
class Chicken {
weak var egg: Egg?
}
class Egg {
var parent: Chicken!
}
let ? = Chicken()
let ? = Egg()
?.egg = ?
?.parent = ?
?
class Chicken {
weak var egg: Egg?
}
class Egg {
var parent: Chicken!
}
let ? = Chicken()
let ? = Egg()
?.egg = ?
?.parent = ?
?
parent
?
egg
?
class Chicken {
weak var egg: Egg?
}
class Egg {
var parent: Chicken!
}
let ? = Chicken()
let ? = Egg()
?.egg = ?
?.parent = ?
?
parent
?
egg
?
class Chicken {
weak var egg: Egg?
}
class Egg {
var parent: Chicken!
}
let ? = Chicken()
let ? = Egg()
?.egg = ?
?.parent = ?
?
parent
?
egg
?
class Chicken {
weak var egg: Egg?
}
class Egg {
var parent: Chicken!
}
let ? = Chicken()
let ? = Egg()
?.egg = ?
?.parent = ?
?
parent
?
egg
?
class Chicken {
weak var egg: Egg?
}
class Egg {
var parent: Chicken!
}
let ? = Chicken()
let ? = Egg()
?.egg = ?
?.parent = ?
?
parent
?
egg
?
class Chicken {
weak var egg: Egg?
}
class Egg {
var parent: Chicken!
}
let ? = Chicken()
let ? = Egg()
?.egg = ?
?.parent = ?
?
parent
?
egg
?
class Chicken {
weak var egg: Egg?
}
class Egg {
var parent: Chicken!
}
let ? = Chicken()
let ? = Egg()
?.egg = ?
?.parent = ?
?
parent
?
egg
?
?
?
?
?
?
?
?class MyClass {
var closure: (() -> Void)? = nil
func test() {
closure = {
self.method()
}
}
func method() { // }
}
let obj1 = MyClass()
obj1.test()
?
?class MyClass {
var closure: (() -> Void)? = nil
func test() {
closure = {
self.method()
}
}
func method() { // }
}
let obj1 = MyClass()
obj1.test()
?
?class MyClass {
var closure: (() -> Void)? = nil
func test() {
closure = {
self.method()
}
}
func method() { // }
}
let obj1 = MyClass()
obj1.test()
?
?class MyClass {
var closure: (() -> Void)? = nil
func test() {
closure = {
self.method()
}
}
func method() { // }
}
let obj1 = MyClass()
obj1.test()
?
?class MyClass {
var closure: (() -> Void)? = nil
func test() {
closure = {
self.method()
}
}
func method()
}
let obj1 = MyClass()
obj1.test()
instance
closure
obj1
= nil
?
?class MyClass {
var closure: (() -> Void)? = nil
func test() {
closure = {
self.method()
}
}
func method()
}
let obj1 = MyClass()
obj1.test()
instance
closure
obj1
= nil
( )
self
?
?class MyClass {
var closure: (() -> Void)? = nil
func test() {
closure = {
self.method()
}
}
func method()
}
let obj1 = MyClass()
obj1.test()
instance
closure
obj1 ( )
self
= nil
?
?class MyClass {
var closure: (() -> Void)? = nil
func test() {
closure = {
self.method()
}
}
func method()
}
let obj1 = MyClass()
obj1.test()
instance
closure
obj1 ( )
self
?
class MyClass {
var closure: (() -> Void)? = nil
func test() {
closure = { [weak self] in
self?.method()
}
}
func method()
}
let obj1 = MyClass()
obj1.test()
?
class MyClass {
var closure: (() -> Void)? = nil
func test() {
closure = { [weak self] in
self?.method()
}
}
func method()
}
let obj1 = MyClass()
obj1.test()
instance
closure
obj1
( )
self
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
ɾڳ٤ȥ

More Related Content

Similar to ɾڳ٤ȥ (20)

Quick swift tour
Quick swift tour
Kazunobu Tasaka
?
From android/java to swift (3)
From android/java to swift (3)
allanh0526
?
A swift introduction to Swift
A swift introduction to Swift
Giordano Scalzo
?
Pooya Khaloo Presentation on IWMC 2015
Pooya Khaloo Presentation on IWMC 2015
Iran Entrepreneurship Association
?
Introduction to Swift
Introduction to Swift
Matteo Battaglio
?
dotSwift 2016 : Beyond Crusty - Real-World Protocols
dotSwift 2016 : Beyond Crusty - Real-World Protocols
Rob Napier
?
Introduction to Swift 2
Introduction to Swift 2
Joris Timmerman
?
Deep Dive Into Swift
Deep Dive Into Swift
Sarath C
?
Swift - the future of iOS app development
Swift - the future of iOS app development
openak
?
Denis Lebedev. Non functional swift.
Denis Lebedev. Non functional swift.
Alina Dolgikh
?
Programming Language Swift Overview
Programming Language Swift Overview
Kaz Yoshikawa
?
Swift Rocks #2: Going functional
Swift Rocks #2: Going functional
Hackraft
?
Hello Swift Final 5/5 - Structures and Classes
Hello Swift Final 5/5 - Structures and Classes
Cody Yun
?
Stanfy MadCode Meetup #9: Functional Programming 101 with Swift
Stanfy MadCode Meetup #9: Functional Programming 101 with Swift
Stanfy
?
Swift the implicit parts
Swift the implicit parts
Maxim Zaks
?
Swift 5.1 Language Guide Notes.pdf
Swift 5.1 Language Guide Notes.pdf
JkPoppy
?
How would you describe Swift in three words?
How would you describe Swift in three words?
Colin Eberhardt
?
Software Craftsmanship NYC Meetup: The Pony Programming Language
Software Craftsmanship NYC Meetup: The Pony Programming Language
aturley_slides
?
Pony vug prime cuts the best pieces of pony
Pony vug prime cuts the best pieces of pony
aturley_slides
?
Swift - Modern & Expressive, or Magical Unicorn?
Swift - Modern & Expressive, or Magical Unicorn?
Mike Jones
?
From android/java to swift (3)
From android/java to swift (3)
allanh0526
?
A swift introduction to Swift
A swift introduction to Swift
Giordano Scalzo
?
dotSwift 2016 : Beyond Crusty - Real-World Protocols
dotSwift 2016 : Beyond Crusty - Real-World Protocols
Rob Napier
?
Deep Dive Into Swift
Deep Dive Into Swift
Sarath C
?
Swift - the future of iOS app development
Swift - the future of iOS app development
openak
?
Denis Lebedev. Non functional swift.
Denis Lebedev. Non functional swift.
Alina Dolgikh
?
Programming Language Swift Overview
Programming Language Swift Overview
Kaz Yoshikawa
?
Swift Rocks #2: Going functional
Swift Rocks #2: Going functional
Hackraft
?
Hello Swift Final 5/5 - Structures and Classes
Hello Swift Final 5/5 - Structures and Classes
Cody Yun
?
Stanfy MadCode Meetup #9: Functional Programming 101 with Swift
Stanfy MadCode Meetup #9: Functional Programming 101 with Swift
Stanfy
?
Swift the implicit parts
Swift the implicit parts
Maxim Zaks
?
Swift 5.1 Language Guide Notes.pdf
Swift 5.1 Language Guide Notes.pdf
JkPoppy
?
How would you describe Swift in three words?
How would you describe Swift in three words?
Colin Eberhardt
?
Software Craftsmanship NYC Meetup: The Pony Programming Language
Software Craftsmanship NYC Meetup: The Pony Programming Language
aturley_slides
?
Pony vug prime cuts the best pieces of pony
Pony vug prime cuts the best pieces of pony
aturley_slides
?
Swift - Modern & Expressive, or Magical Unicorn?
Swift - Modern & Expressive, or Magical Unicorn?
Mike Jones
?

More from mike-neko (9)

Vision
Vision
mike-neko
?
Unity x CoreML
mike-neko
?
SiriKit
mike-neko
?
ML@WWDC2018
mike-neko
?
ARKit2
mike-neko
?
ǰѳ
ǰѳ
mike-neko
?
ǰѳǥꥢ륿໭任
mike-neko
?
ARKit
mike-neko
?
ѱٲǰձپDz
ѱٲǰձپDz
mike-neko
?
Unity x CoreML
mike-neko
?
SiriKit
mike-neko
?
ML@WWDC2018
mike-neko
?
ARKit2
mike-neko
?
ǰѳǥꥢ륿໭任
mike-neko
?
ARKit
mike-neko
?
Ad

Recently uploaded (20)

Kubernetes Security Act Now Before Its Too Late
Kubernetes Security Act Now Before Its Too Late
Michael Furman
?
PyData - Graph Theory for Multi-Agent Integration
PyData - Graph Theory for Multi-Agent Integration
barqawicloud
?
Artificial Intelligence in the Nonprofit Boardroom.pdf
Artificial Intelligence in the Nonprofit Boardroom.pdf
OnBoard
?
FIDO Seminar: New Data: Passkey Adoption in the Workforce.pptx
FIDO Seminar: New Data: Passkey Adoption in the Workforce.pptx
FIDO Alliance
?
Down the Rabbit Hole C Solving 5 Training Roadblocks
Down the Rabbit Hole C Solving 5 Training Roadblocks
Rustici Software
?
Why Its Critical to Have an Integrated Development Methodology for Edge AI,...
Why Its Critical to Have an Integrated Development Methodology for Edge AI,...
Edge AI and Vision Alliance
?
Integration of Utility Data into 3D BIM Models Using a 3D Solids Modeling Wor...
Integration of Utility Data into 3D BIM Models Using a 3D Solids Modeling Wor...
Safe Software
?
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
NTT DATA Technology & Innovation
?
The State of Web3 Industry- Industry Report
The State of Web3 Industry- Industry Report
Liveplex
?
FIDO Seminar: Perspectives on Passkeys & Consumer Adoption.pptx
FIDO Seminar: Perspectives on Passkeys & Consumer Adoption.pptx
FIDO Alliance
?
Scaling GenAI Inference From Prototype to Production: Real-World Lessons in S...
Scaling GenAI Inference From Prototype to Production: Real-World Lessons in S...
Anish Kumar
?
Crypto Super 500 - 14th Report - June2025.pdf
Crypto Super 500 - 14th Report - June2025.pdf
Stephen Perrenod
?
Reducing Conflicts and Increasing Safety Along the Cycling Networks of East-F...
Reducing Conflicts and Increasing Safety Along the Cycling Networks of East-F...
Safe Software
?
Edge-banding-machines-edgeteq-s-200-en-.pdf
Edge-banding-machines-edgeteq-s-200-en-.pdf
AmirStern2
?
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Alliance
?
Analysis of the changes in the attitude of the news comments caused by knowin...
Analysis of the changes in the attitude of the news comments caused by knowin...
Matsushita Laboratory
?
National Fuels Treatments Initiative: Building a Seamless Map of Hazardous Fu...
National Fuels Treatments Initiative: Building a Seamless Map of Hazardous Fu...
Safe Software
?
Your startup on AWS - How to architect and maintain a Lean and Mean account
Your startup on AWS - How to architect and maintain a Lean and Mean account
angelo60207
?
FIDO Seminar: Targeting Trust: The Future of Identity in the Workforce.pptx
FIDO Seminar: Targeting Trust: The Future of Identity in the Workforce.pptx
FIDO Alliance
?
Addressing Evolving AI Model Challenges Through Memory and Storage, a Prese...
Addressing Evolving AI Model Challenges Through Memory and Storage, a Prese...
Edge AI and Vision Alliance
?
Kubernetes Security Act Now Before Its Too Late
Kubernetes Security Act Now Before Its Too Late
Michael Furman
?
PyData - Graph Theory for Multi-Agent Integration
PyData - Graph Theory for Multi-Agent Integration
barqawicloud
?
Artificial Intelligence in the Nonprofit Boardroom.pdf
Artificial Intelligence in the Nonprofit Boardroom.pdf
OnBoard
?
FIDO Seminar: New Data: Passkey Adoption in the Workforce.pptx
FIDO Seminar: New Data: Passkey Adoption in the Workforce.pptx
FIDO Alliance
?
Down the Rabbit Hole C Solving 5 Training Roadblocks
Down the Rabbit Hole C Solving 5 Training Roadblocks
Rustici Software
?
Why Its Critical to Have an Integrated Development Methodology for Edge AI,...
Why Its Critical to Have an Integrated Development Methodology for Edge AI,...
Edge AI and Vision Alliance
?
Integration of Utility Data into 3D BIM Models Using a 3D Solids Modeling Wor...
Integration of Utility Data into 3D BIM Models Using a 3D Solids Modeling Wor...
Safe Software
?
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
NTT DATA Technology & Innovation
?
The State of Web3 Industry- Industry Report
The State of Web3 Industry- Industry Report
Liveplex
?
FIDO Seminar: Perspectives on Passkeys & Consumer Adoption.pptx
FIDO Seminar: Perspectives on Passkeys & Consumer Adoption.pptx
FIDO Alliance
?
Scaling GenAI Inference From Prototype to Production: Real-World Lessons in S...
Scaling GenAI Inference From Prototype to Production: Real-World Lessons in S...
Anish Kumar
?
Crypto Super 500 - 14th Report - June2025.pdf
Crypto Super 500 - 14th Report - June2025.pdf
Stephen Perrenod
?
Reducing Conflicts and Increasing Safety Along the Cycling Networks of East-F...
Reducing Conflicts and Increasing Safety Along the Cycling Networks of East-F...
Safe Software
?
Edge-banding-machines-edgeteq-s-200-en-.pdf
Edge-banding-machines-edgeteq-s-200-en-.pdf
AmirStern2
?
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Seminar: Authentication for a Billion Consumers - Amazon.pptx
FIDO Alliance
?
Analysis of the changes in the attitude of the news comments caused by knowin...
Analysis of the changes in the attitude of the news comments caused by knowin...
Matsushita Laboratory
?
National Fuels Treatments Initiative: Building a Seamless Map of Hazardous Fu...
National Fuels Treatments Initiative: Building a Seamless Map of Hazardous Fu...
Safe Software
?
Your startup on AWS - How to architect and maintain a Lean and Mean account
Your startup on AWS - How to architect and maintain a Lean and Mean account
angelo60207
?
FIDO Seminar: Targeting Trust: The Future of Identity in the Workforce.pptx
FIDO Seminar: Targeting Trust: The Future of Identity in the Workforce.pptx
FIDO Alliance
?
Addressing Evolving AI Model Challenges Through Memory and Storage, a Prese...
Addressing Evolving AI Model Challenges Through Memory and Storage, a Prese...
Edge AI and Vision Alliance
?
Ad

ɾڳ٤ȥ

  • 5. ??
  • 11. ? ?
  • 12. ? ?
  • 13. ? ?
  • 15. ? ? ?
  • 20. ? ? ?
  • 21. ? struct ValueType { var value = 1 } let obj1 = ValueType() var obj2 = obj1 obj2.value = 2 print(obj1.value) // 1
  • 22. ? struct ValueType { var value = 1 } let obj1 = ValueType() var obj2 = obj1 obj2.value = 2 print(obj1.value) // 1 obj1 1
  • 23. ? struct ValueType { var value = 1 } let obj1 = ValueType() var obj2 = obj1 obj2.value = 2 print(obj1.value) // 1 obj1 1 obj2 1
  • 24. ? struct ValueType { var value = 1 } let obj1 = ValueType() var obj2 = obj1 obj2.value = 2 print(obj1.value) // 1 obj1 1 obj2 2
  • 26. class ReferenceType { var value = 1 } let obj1 = ReferenceType() let obj2 = obj1 obj2.value = 2 print(obj1.value) // 2 ?
  • 27. class ReferenceType { var value = 1 } let obj1 = ReferenceType() let obj2 = obj1 obj2.value = 2 print(obj1.value) // 2 ? instance 1
  • 28. class ReferenceType { var value = 1 } let obj1 = ReferenceType() let obj2 = obj1 obj2.value = 2 print(obj1.value) // 2 ? obj1 instance 1
  • 29. class ReferenceType { var value = 1 } let obj1 = ReferenceType() let obj2 = obj1 obj2.value = 2 print(obj1.value) // 2 ? obj1 obj2 instance 1
  • 30. class ReferenceType { var value = 1 } let obj1 = ReferenceType() let obj2 = obj1 obj2.value = 2 print(obj1.value) // 2 ? obj1 obj2 instance 1
  • 31. class ReferenceType { var value = 1 } let obj1 = ReferenceType() let obj2 = obj1 obj2.value = 2 print(obj1.value) // 2 ? obj1 obj2 instance 2
  • 32. class ReferenceType { var value = 1 } let obj1 = ReferenceType() let obj2 = obj1 obj2.value = 2 print(obj1.value) // 2 ? obj1 obj2 instance 2
  • 33. class ReferenceType { var value = 1 } let obj1 = ReferenceType() let obj2 = obj1 obj2.value = 2 print(obj1.value) // 2 ? obj1 obj2 instance 2
  • 34. ? ? ?
  • 37. class ReferenceType { var value = 1 } let obj1 = ReferenceType() let obj2 = obj1 obj2.value = 2 print(obj1.value) // 2 ? obj1 obj2 instance 2
  • 38. class ReferenceType { var value = 1 } let obj1 = ReferenceType() let obj2 = obj1 obj2.value = 2 print(obj1.value) // 2 ? obj1 obj2 instance 2
  • 39. class ReferenceType { var value = 1 } let obj1 = ReferenceType() let obj2 = obj1 obj2.value = 2 print(obj1.value) // 2 ? obj1 obj2 instance 2
  • 43. ? class Chicken { var egg: Egg! } class Egg { var parent: Chicken! } let ? = Chicken() let ? = Egg() ?.egg = ? ?.parent = ?
  • 44. ? class Chicken { var egg: Egg! } class Egg { var parent: Chicken! } let ? = Chicken() let ? = Egg() ?.egg = ? ?.parent = ? ? egg
  • 45. ? class Chicken { var egg: Egg! } class Egg { var parent: Chicken! } let ? = Chicken() let ? = Egg() ?.egg = ? ?.parent = ? ? parent ? egg
  • 46. ? class Chicken { var egg: Egg! } class Egg { var parent: Chicken! } let ? = Chicken() let ? = Egg() ?.egg = ? ?.parent = ? ? parent ? egg
  • 47. ? class Chicken { var egg: Egg! } class Egg { var parent: Chicken! } let ? = Chicken() let ? = Egg() ?.egg = ? ?.parent = ? ? parent ? egg
  • 48. ? class Chicken { var egg: Egg! } class Egg { var parent: Chicken! } let ? = Chicken() let ? = Egg() ?.egg = ? ?.parent = ? ? parent ? egg
  • 49. ? class Chicken { var egg: Egg! } class Egg { var parent: Chicken! } let ? = Chicken() let ? = Egg() ?.egg = ? ?.parent = ? ? parent ? egg
  • 50. ? class Chicken { var egg: Egg! } class Egg { var parent: Chicken! } let ? = Chicken() let ? = Egg() ?.egg = ? ?.parent = ? ? parent ? egg
  • 51. ? ? ?
  • 52. ? class Chicken { weak var egg: Egg? } class Egg { var parent: Chicken! } let ? = Chicken() let ? = Egg() ?.egg = ? ?.parent = ?
  • 53. ? class Chicken { weak var egg: Egg? } class Egg { var parent: Chicken! } let ? = Chicken() let ? = Egg() ?.egg = ? ?.parent = ? ? parent ? egg
  • 54. ? class Chicken { weak var egg: Egg? } class Egg { var parent: Chicken! } let ? = Chicken() let ? = Egg() ?.egg = ? ?.parent = ? ? parent ? egg
  • 55. ? class Chicken { weak var egg: Egg? } class Egg { var parent: Chicken! } let ? = Chicken() let ? = Egg() ?.egg = ? ?.parent = ? ? parent ? egg
  • 56. ? class Chicken { weak var egg: Egg? } class Egg { var parent: Chicken! } let ? = Chicken() let ? = Egg() ?.egg = ? ?.parent = ? ? parent ? egg
  • 57. ? class Chicken { weak var egg: Egg? } class Egg { var parent: Chicken! } let ? = Chicken() let ? = Egg() ?.egg = ? ?.parent = ? ? parent ? egg
  • 58. ? class Chicken { weak var egg: Egg? } class Egg { var parent: Chicken! } let ? = Chicken() let ? = Egg() ?.egg = ? ?.parent = ? ? parent ? egg
  • 59. ? class Chicken { weak var egg: Egg? } class Egg { var parent: Chicken! } let ? = Chicken() let ? = Egg() ?.egg = ? ?.parent = ? ? parent ? egg
  • 61. ? ?class MyClass { var closure: (() -> Void)? = nil func test() { closure = { self.method() } } func method() { // } } let obj1 = MyClass() obj1.test()
  • 62. ? ?class MyClass { var closure: (() -> Void)? = nil func test() { closure = { self.method() } } func method() { // } } let obj1 = MyClass() obj1.test()
  • 63. ? ?class MyClass { var closure: (() -> Void)? = nil func test() { closure = { self.method() } } func method() { // } } let obj1 = MyClass() obj1.test()
  • 64. ? ?class MyClass { var closure: (() -> Void)? = nil func test() { closure = { self.method() } } func method() { // } } let obj1 = MyClass() obj1.test()
  • 65. ? ?class MyClass { var closure: (() -> Void)? = nil func test() { closure = { self.method() } } func method() } let obj1 = MyClass() obj1.test() instance closure obj1 = nil
  • 66. ? ?class MyClass { var closure: (() -> Void)? = nil func test() { closure = { self.method() } } func method() } let obj1 = MyClass() obj1.test() instance closure obj1 = nil ( ) self
  • 67. ? ?class MyClass { var closure: (() -> Void)? = nil func test() { closure = { self.method() } } func method() } let obj1 = MyClass() obj1.test() instance closure obj1 ( ) self = nil
  • 68. ? ?class MyClass { var closure: (() -> Void)? = nil func test() { closure = { self.method() } } func method() } let obj1 = MyClass() obj1.test() instance closure obj1 ( ) self
  • 69. ? class MyClass { var closure: (() -> Void)? = nil func test() { closure = { [weak self] in self?.method() } } func method() } let obj1 = MyClass() obj1.test()
  • 70. ? class MyClass { var closure: (() -> Void)? = nil func test() { closure = { [weak self] in self?.method() } } func method() } let obj1 = MyClass() obj1.test() instance closure obj1 ( ) self
  • 72. ? ?