잡초의 일지

[Swift] Closure 클로저 본문

[코딩] 배우는것/Swift

[Swift] Closure 클로저

JabCho 2020. 7. 9. 18:50
728x90
반응형
SMALL

Closure

이름이 없는 메소드. 동적으로 끼워넣을 수 있다는 장점.

클로저가 살아있는 한, 클로저 밖에서도 변수 사용 가능.

 

Closure 선언

var multiplyClosure: (Int, Int) -> Int = { (a: Int, b: Int) -> Int in
    return a*b
}
/***********************************************************************************/
var multiplyClosure: (Int, Int) -> Int = { a, b in	//파라미터 없애고, 반환하는 값 아니까 없애고, 그러면 소괄호도 필요없다.
    return $0 * $1                                  	//첫번째꺼랑 두번째꺼 곱해서 리턴하겠다. --> 이렇게 쓰면 앞에 있는거 없이 아래처럼도 쓸 수 있다.
}
/***********************************************************************************/
var multiplyClosure: (Int, Int) -> Int = { $0 * $1} 	//이렇게까지 간소화할 수 있다.

이렇게 계산된다.

 

fucntion이 클로저 받는 경우

func operateTwoNum(a: Int, b: Int, operation: (Int, Int) -> Int) -> Int {
    let result = operation(a, b)
    return result
}

 

Closure 바꾸기

  • addClosure라는 새로운 클로져 만들어서 operation 변경 가능
operateTwoNum(a: 4, b: 2, operation: multiplyClosure)           
var addClosure: (Int, Int) -> Int = {a, b in
    return a + b
}
operateTwoNum(a: 4, b: 2, operation: addClosure)

 

  •  즉흥적으로 operation 변경 가능
operateTwoNum(a: 4, b: 2) { a, b in        
    return a / b
}

 

input, output 없는 Closure

let voidClosure: () -> Void = {
    print("hello world!")
}
voidClosure()

 

Capturing Values

var count = 0
let incrementer = {		// 클로저
    count += 1
}
incrementer()
incrementer()
incrementer()
incrementer()

count				//4가 된다.

 

 

 

 

----------------------------------------------------------------------------------------------------------------------------

연습

import UIKit

/***** Closure 선언 *****/
var addClosure: (Int, Int) -> Int = { (a:Int, b:Int) ->Int in
    return a + b
}
var subtractClosure: (Int, Int) -> Int = { (a: Int, b: Int) -> Int in
    return a - b
}
var addClosure2: (Int, Int) -> Int = { a, b in
    return a + b
}
var addClosure3: (Int, Int) -> Int = { $0 + $1 }

/***** function이 Closure 받는 경우 **** */
func calculateFuncion(a:Int, b:Int, operation: (Int, Int)->Int ) -> Int {
    let res = operation(a, b)
    return res
}
calculateFuncion(a: 2, b: 3, operation: addClosure)
calculateFuncion(a: 5, b: 1, operation: subtractClosure)        // 다른 클로저를 넣어서 사용할 수도 있다.
calculateFuncion(a: 4, b: 2) { a, b in           // 즉흥적으로 다른 클로저를 만들어서 사용할 수도 있다.
    return a*b
}
// input, output 없는 클로저
let voidClosure: () -> Void = {
    print("hello world!")
}
voidClosure()
// Capturing Values
var count = 0
let incrementClosur = {
    count+=1
}
incrementClosur()
incrementClosur()
incrementClosur()
count

----------------------------------------------------------------------------------------------------------------------------

 

클로저... 어렵고 중요한것.... 많이 연습해야 되겠다..

728x90
반응형
LIST

'[코딩] 배우는것 > Swift' 카테고리의 다른 글

[Swift] Protocol 프로토콜  (0) 2020.07.10
[Swift] Structure 구조체  (0) 2020.07.10
[Swift] Collection : Set  (0) 2020.07.09
[Swift] Collection : Dictionary  (0) 2020.07.09
[Swift] Collection : Array  (0) 2020.07.09
Comments