[Swift]エンクロージャ(Closers)
エンクロージャ
コードに転送および使用可能な独立した機能ブロックで、一級オブジェクトとして使用できます.
一級オブジェクト?
伝達パラメータとして送信してもよいし、変数/定数を格納または伝達してもよいし、関数の戻り値としてもよい.
コードの例
import UIKit
/*
{ (parameters) -> return type in
statements
}
*/
let hello = { () -> () in
print("hello")
}
hello()
let hello2 = { (name: String) -> String in
return "Hello, \(name)"
}
//hello2(name: "Daeseong") // Error : 전달인자 레이블을 적으면 오류 발생
hello2("Daeseong") // "Hello, Daeseong"
func doSomething(closure: () -> ()) {
closure()
}
doSomething(closure : { () -> () in
print("hello")
}) // "hello"
func doSomething2() -> () -> () {
return { () -> () in
print("hello!")
}
}
doSomething2()() // hello!
// Closure의 축약
func doSomething3(closure: (Int, Int, Int) -> Int) {
closure(1,2,3)
}
doSomething3(closure: {(a,b,c) in
return a+b+c
})
doSomething3(closure : {
return $0+$1+$2
})
doSomething3(closure : {
return $0+$1+$2
})
doSomething3(closure : {
$0+$1+$2
})
doSomething3(){
$0+$1+$2
}
doSomething3 {
$0+$1+$2
}
Reference
この問題について([Swift]エンクロージャ(Closers)), 我々は、より多くの情報をここで見つけました https://velog.io/@daeseongkim/Swift-클로저-Closuresテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol