어흥
[Swift] Closure 본문
728x90
반응형
[Closure]
1) 정의 및 특징
- 사용자의 코드 안에서 전달되어 사용할 수 있는 로직을 가진 일급 객체로, {}로 구분된다
- 일급 객체는 전달 인자로 보낼 수 있고, 변수/상수 등으로 저장하거나 전달할 수 있으며, 반환값도 가능하다
- 참조타입이며, 함수는 이름이 있는 클로저다
1-1) 함수 <-> 클로저
Function(Global) | Closure |
이름이 있다 | 이름 없다 |
func 키워드 필요 | func 키워드 필요 없다 |
인자 받을 수 있다 | |
값 Return 가능 | |
변수로 할당할 수 있다 | |
일급 객체(First Class Type) |
2) 사용법
{(parameters) -> return type in
statements
}
3-1) 예시
@IBAction func hello(_sender:Any){
let alert = UIAlertController(title:"Welcome to 어흥's Blog")
let action = UIAlertAction(title: "OK", style:.default, handler:{action in self.pushBtn()})
alert.addAction(action)
present(alert, animated:true, completion: nil)
}
func pushBtn(){
print("버튼이 눌렸습니다")
}
결과
: 특정 버튼을 누른 뒤, OK를 누르면 pushBtn() 함수가 호출되어 "버튼이 눌렸습니다" 문구가 Output창에 출력됩니다
3-2) 예시 2
//밑에 2개 모두 같은 반환값을 가진다
var multiplyClousre: (Int, Int) -> Int = {a, b in
return a * b
}
var multiplyClosure2: (Int, Int) -> Int = { $0 * $1 } //0번째 인자, 1번째 인자
let result = multiplyClosure(4,2) //8
//두 수에 대한 연산
func operateTwoNum(a: Int, b: Int, operation: (Int, Int) -> Int) -> Int{
let result = operation(a,b)
return result
}
operateTwoNum(a: 4, b:2, operation: multiplyClosure2) //8
//두 수의 합을 반환하는 클로저
var addClosure: (Int, Int) -> Int = { a, b in
return a+b
}
operateTwoNum(a: 4, b:2, operation: addClosure) //6
//두 수의 나눗셈에 대한 클로저를 바로 선언
operateTwoNum(a:4, b:2) { a, b in //2
return a/b
}
3-3) 예시 3
let voidClosure: () -> Void = {
print("iOS 개발자")
}
voidClosure() //iOS 개발자
var count = 0
let increment = {
count+=1
}
increment()
increment()
increment()
increment()
count //4
3-4) 예시 4
import UIKit
/*
{(param) -> return type in
statement
...
*/
//#1. 초 Simple Closure
let choSimpleClosure = {
}
choSimpleClosure()
//#2. 코드블록을 구현한 Closure
let choSimpleClosure2 = {
print("Hello, Closure")
}
choSimpleClosure2()
//#3. 인풋 파라미터를 받는 Closure
let choSimpleClosure3: (String) -> Void = { name in
print("Hello, Closure. My name is \(name)")
}
choSimpleClosure3("Mike")
//#4. 값을 리턴하는 Closure
let choSimpleClosure4: (String) -> String = { name in
let message = "iOS Developer \(name)"
return message
}
let result = choSimpleClosure4("Mike")
print(result)
//#5. Closure를 파라미터로 받는 함수 구현
func someSimpleFunction(choSimpleClosure: () -> Void){
print("호출")
choSimpleClosure()
}
someSimpleFunction(choSimpleClosure: {
print("Hello Corona")
})
//#6. Trailing Closure
func someSimpleFunction2(message: String, choSimpleClosure2: () -> Void){
print("함수에서 호출됨. 메세지는 : \(message)")
choSimpleClosure2()
}
someSimpleFunction2(message: "메로나" , choSimpleClosure2: {
print("Hello Corona from Closure")
})
728x90
반응형
'iOS' 카테고리의 다른 글
[Swift] Protocol (0) | 2020.08.28 |
---|---|
[Swift] Structure, Class (0) | 2020.08.27 |
[Swift] Dictionary, Set (0) | 2020.08.25 |
[Swift] 배열 (0) | 2020.08.25 |
[Swift] nil + 4가지 고급 기능 (0) | 2020.08.24 |
Comments