Swift 클로저(2020.10.29)

K S Michael·2020년 10월 29일

swift TIL

목록 보기
10/29

코드의 블럭
일급시민(first-citizen)
변수, 상수 등으로 저장, 전달인자로 전달이 가능
함수: 이름이 있는 클로저

정의

매개변수 필요할 때
{(매개변수 목록) -> 반환타입 in
실행코드
}
매개변수 필요 없을 때
{() -> 반환타입 in
실행코드
}

반환하지 않을 때
{() -> Void in
실행코드
}

// 함수를 사용한다면
func sumFunction(a: Int, b: Int)->Int{
	return a + b
}
var sumResult: Int = sumFunction(a:1, b:2)
print(sumResult) // 3

//클로저의 사용
var sum: (Int, Int) -> Int = {(a:Int, b:Int) -> Int in
	return a + b
}
// 코드 해설: sum 은 두개의 Int를 받아서 Int를 반환하는 타입을 가진 함수이고, 그 함수는 첫번째 인자로 a, 두번째 인자로 b 를 받고, Int를 반환하하고, 실행코드는 두인자 a,b의 더한 내용을 반환한다.

sumResult = sum(1,2)
print(sumResult) // 3
// 함수는 클로저의 일종이므로
// sum 변수에는 당연히 함수도 할당할 수 있습니다.

sum = sumFuncton(a:b:)

sumResult = sum(1,2)
print(sumResult) // 3

함수의 전달인자로서의 클로서

클로저는 주로 함수의 전달인자로 많이 사용된다. 다른 용도에서도 많이 사용된다.

let add: (Int, Int) -> Int
add = {(a: Int, b: Int) -> Int in
	return a + b
}

let substract: (Int, Int) -> Int
substract = {(a:Int, b:Int) -> Int in
	return a-b
}

let divide:(Int, Int) -> Int
divide = { (a:Int, b:Int) -> Int in
	return a/b
}

func calculate(a: Int, b: Int, method: (Int, Int) ->Int) ->Int{
	return method(a,b)
}

/*
위 함수는 3개의 인자를 전달 받는다 
첫번째 인자는 Int,
두번째 인자는 Int
세번째 인자는 method
반환하는 값의 타입은 Int이고, 반환하는 값은 전달받은 함수를 실행한 결과이다.
*/

var calculated: Int

calculated = calculate(a:50, b:10, method:add)
// 전달받은 50과 10을 더하는 메서드 add 를 실행한 결과를 반환한다
print(calaclated) // 60

// 아래 코드도 비슷한 로직이다.

calculated = calculate(a:50, b:10, method:substract)

print(calaclated) // 40

calculated = calculate(a:50, b:10, method:divide)

print(calaclated) // 5


calculated = calculate(a:50, b:10, method:{(left:Int, right: Int)->Int
	return left*Int
})

print(calaclated) // 500

출처 : 유튜브 "yagom"

profile
차근차근

0개의 댓글