[Swift] 트레일링 클로저 / Trailing Closure

2022. 8. 26. 23:53🍏/Swift

- 트레일링 클로저(Trailing Closure)

 후행 클로저라고도 불림.

// 원본 함수
value.sort(by: { (s1, s2) in
	return s1 > s2
})

==

value.sort() { (s1, s2) in
	return s1 > s2
}

==

value.sort { (s1, s2) in
	return s1 > s2
}
// 인자값이 한개라면 인자값을 넣어주기 위한 괄호 부분도 생략이 가능.
// 인자값이 여러개라면, 무작정 괄호를 생략해서는 안됨.
==

func divide(base: Int, success s: () -> Void) -> Int {
	defer {
		s()
	}
	return 100 / base
}

print(divide(base: 10)){print("연산 성공")}
// 마지막 인자값이 트레일링 클로저에 부합한다면 생략가능.
==

func divide(base: Int, success s: () -> Void, fail f: () -> Void) -> Int {
	guard base != 0 else {
		f()
		return 0
	}
	defer {
		s()
	}
	return 100 / base
}

divide(base: 0, success: {print("success")}){print("fail")} // 가능
divide(base: 0){print("success")}{print("fail")} // 불가능
// 마지막 인자값들이 모두 클로저여도 연이어 클로저를 사용할 순 없음.