๋ฐ์ํ
๐ ๋ชฉ๋ก
- closure ์ด๋?
- ํด๋ก์ ๊ธฐ๋ณธ ์ฌ์ฉ
- Example
- parameter with closure
- ๋ค์ค ์ธ์ ํด๋ก์ ธ
- ํด๋ก์ ธ ๊ฐ์ํ ํ๊ธฐ
๐ closure ์ด๋?
์ฝ๋์์ ์ ๋ฌ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ ๋ฆฝ ๊ธฐ๋ฅ ๋ธ๋ก์ด๋ฉฐ, ์ผ๊ธ ๊ฐ์ฒด์ ์ญํ ์ ํ ์ ์์
์ผ๊ธ ๊ฐ์ฒด๋? ์ ๋ฌ ์ธ์๋ก ๋ณด๋ผ ์ ์๊ณ , ๋ณ์/์์ ๋ฑ๋ฅด๋ก ์ ์ฅํ๊ฑฐ๋ ์ ๋ฌํ ์ ์์ผ๋ฉฐ, ํจ์์ ๋ฐํ ๊ฐ์ด ๋ ์๋ ์๋ค!
๐ ํด๋ก์ ๊ธฐ๋ณธ ์ฌ์ฉ
{
(๋งค๊ฐ๋ณ์) -> ๋ฆฌํด ํ์
in
์คํ ๊ตฌ๋ฌธ
}
๐ Example
let hello = { () -> () in
print("Hello")
}
hello()
let hello2 = { (name: String) -> String in
return "Hello, \(name)"
}
// hello2(name: "Eddie") -> ํจ์์ฒ๋ผ label ์ด์๋ ํ๋๋ก ์ ๋ฌ ํ๋ฉด ์๋ฌ
hello2("Eddie") // Hello, Eddie
๐ parameter with closure
func doSomeThing(closure: () -> ()) {
closure();
}
doSomeThing(closure: { () -> () in
print("HELLO")
}) // hello
// ๋ง์ง๋ง ์ธ์๋ก closure๊ฐ ์จ๋ค๋ฉด ๋ฐ์ ์จ์ค์ ์์ต๋๋ค.
doSomeThing() { () -> () in
print("hello2")
}// hello2
// ํ๋๋ง ๋ฐ๋๋ค๋ฉด ()๋ ์๋ต ๊ฐ๋ฅ!
doSomeThing { () -> () in
print("hello2")
}// hello2
// ๋ฆฌํด์ผ๋ก ํด๋ก์
func doSomeThing2() -> () -> () {
return { () -> () in
print("HELLO4")
}
}
doSomeThing2() // HELLO4
๐ ๋ค์ค ์ธ์ ํด๋ก์ ธ
func temp(success: () -> (), fail: () -> ()) {
success()
fail()
}
temp {
() -> () in
print("success")
} fail: {
() -> () in
print("fail")
}
// success, fail
๐ ํด๋ก์ ธ ๊ฐ์ํํ๊ธฐ
func temp2(closure: (Int, Int, Int) -> Int) {
closure(1, 2, 3)
}
// ํ์
์ถ๋ก ์ ์ด์ฉํด ๋ฆฌํด ํ์
๋ ์๋ต ๊ฐ๋ฅ ํ๋ค
temp2(closure: { (a, b, c) in
return a + b + c
})
// $0...์ผ๋ก ์ธ์ ๊ฐ์ ์ฐธ๊ณ ํ ์ ์๋ค
temp2(closure: {
return $0 + $1 + $2
})
// return์ ์๋ต๊ฐ๋ฅ
temp2(closure: {
// print("hello") ๋จ์ผ ๋ฆฌํด๋ฌธ์ด ์๋๋ฉด ์๋ฌ ๋ฐ์
$0 + $1 + $2
})
// ๋ฐ์ผ๋ก ๋บด๋ผ์ ์๋ค
temp2() {
$0 + $1 + $2
}
// ์ธ์๊ฐ ํ๋๋ผ๋ฉด ()๋ ์๋ต ๊ฐ๋ฅ
temp2 {
$0 + $1 + $2
}
๋ฐ์ํ
'Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Swift - Content Hugging, compression Resistance (0) | 2021.12.06 |
---|---|
Swift ๊ณ ์ฐจํจ์(map, filter, reduce) (0) | 2021.11.28 |
Swift try-catch (0) | 2021.11.28 |
Swift ์ต์ ๋ ์ฒด์ด๋ (0) | 2021.11.28 |
Swift ์ด๊ฑฐํ (0) | 2021.11.28 |