Created
December 15, 2015 16:13
-
-
Save haranicle/6280da95588205b874c1 to your computer and use it in GitHub Desktop.
Captureの挙動テスト #CodePiece
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class HTMLElement { | |
let name: String | |
let text: String? | |
// プロパティでasHTMLへのstrong参照を持っている | |
lazy var asHTML: Void -> String = { // nameとtextを使いたいからlazy | |
// Closure内でselfのプロパティをキャプチャしている | |
if let text = self.text { | |
return "<\(self.name)>\(text)</\(self.name)>" | |
} else { | |
return "<\(self.name) />" | |
} | |
} | |
init(name: String, text: String? = nil) { | |
self.name = name | |
self.text = text | |
} | |
deinit { | |
print("\(name) is being deinitialized") | |
} | |
} | |
let defaultText = "default text" | |
do { | |
var h1:HTMLElement = HTMLElement(name: "h1") | |
h1.asHTML = { | |
return "<\(h1.name)>\(h1.text ?? defaultText)</\(h1.name)>" | |
} | |
print(h1.asHTML()) // "<h1>default text</h1>"とprintされる | |
// なにもprintされない。 | |
} | |
do { | |
var h2:HTMLElement? = HTMLElement(name: "h2") | |
h2!.asHTML = { | |
return "<\(h2!.name)>\(h2!.text ?? defaultText)</\(h2!.name)>" | |
} | |
print(h2!.asHTML()) // "<h2>default text</h2>"とprintされる | |
// なにもprintされない。 | |
} | |
do { | |
var h3:HTMLElement? = HTMLElement(name: "h3") | |
h3!.asHTML = { | |
return "<\(h3!.name)>\(h3!.text ?? defaultText)</\(h3!.name)>" | |
} | |
print(h3!.asHTML()) // "<h3>default text</h3>"とprintされる | |
h3 = nil | |
// "h3 is being deinitialized" とprintされる。 | |
} | |
do { | |
var br:HTMLElement = HTMLElement(name: "br") // headingの参照カウント1 | |
print(br.asHTML()) // "<br />"とprintされる | |
// なにもprintされない。 | |
} | |
do { | |
var wbr:HTMLElement? = HTMLElement(name: "wbr") // headingの参照カウント1 | |
print(wbr!.asHTML()) // "<wbr />"とprintされる | |
// なにもprintされない。 | |
} | |
do { | |
var hr:HTMLElement? = HTMLElement(name: "hr") // headingの参照カウント1 | |
print(hr!.asHTML()) // "<hr />"とprintされる | |
hr = nil | |
// なにもprintされない。 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment