본문 바로가기
::public/Swift

Closure

by 해맑은욱 2022. 11. 7.

함수처럼 기능을 수행하는 코드블록

함수와 다르게 이름이 없다

/*
{ (parameters) -> return type in
    statement
 ...
 }
 */

// Cho Simple Closure

let ChoSimpleClosure = {
    
}
ChoSimpleClosure()


// 코드 블록을 구현한 Closure

let CodeBlockClosure = {
    print("this is code block")
}
CodeBlockClosure()


// 인풋 파라미터를 받는 Closure

let InputParamClosure: (String) -> Void = { name in
    print("input param is \(name)")
}
InputParamClosure("closure")


// 값을 리턴하는 Closure

let returnClosure: (String) -> String = { name in
    let message = "iOS Developer, \(name)"
    return message
}
let rresult = returnClosure("YOU") // "iOS Developer, YOU"
print(rresult) // "iOS Developer, YOU\n"


// Closure를 파라미터로 받는 함수 구현

func someSimpleFunction(choSimpleClosure: () -> Void) {
    print("func called")
    choSimpleClosure() // 파라미터로 받은 closure 구현
}

someSimpleFunction(choSimpleClosure: {
    print("closure called") // func called // closure called
})


// Trailing Closure
// 마지막 인자가 closure인 경우에 이름 생략 가능

func multiParamsFunction(message: String, soSimpleClosure: () -> Void) {
    print("func called, message is \(message)")
    soSimpleClosure()
}

//multiParamsFunction(message: "", soSimpleClosure: {
//    print("closure called") // func called, message is  // closure called
//})

multiParamsFunction(message: "") {
    print("closure called") // func called, message is  // closure called
}

 

// 일반적인 함수(func)도 closure라고 보면됨.
// 하지만 closure는 보통 "익명 함수"라고 생각하면 됨.
let closure = { (parameters) -> return type in
    statements
}


// Int, Int 를 받아서 Int를 리턴.
var multiplayClosure: (Int, Int) -> Int = { a, b in
    return a * b
}

let result = multiplayClosure(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: multiplayClosure) // 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
    return a / b // 2
}

'::public > Swift' 카테고리의 다른 글

protocol  (0) 2022.11.16
Structure  (0) 2022.11.11
Set  (0) 2022.11.07
Dictionary  (0) 2022.11.06
Array  (0) 2022.11.03