1. 가장 기본적인 함수 전달
2. 기본 클로저
3. 후행 클로저
4. 간소화 가능한 형태
func backwards(first: String, second: String) -> Bool { print("\(first) \(second) 비교중") return first > second } let names = ["wizplan", "eric", "yagom", "jenny"] // Original let Original = names.sorted(by: backwards(first:second:)) // 기본 클로저 let basicClosure: [String] = names.sorted(by: { (first: String, second: String) -> Bool in return first > second }) // 후행 클로저1 let trailingClosure = names.sorted() { (first: String, second: String) -> Bool in return first > second } // 소괄호도 생략 가능 let trailingClosure2 = names.sorted { (first: String, second: String) in return first > second } // 다중 후행 클로저 형태 func multipleTrailing(a: (String) -> Void, b: (Int) -> Void, c: (Double) -> Int) {} let multipleTrailingClousure = multipleTrailing { (x: String) in // contents } b: { (x: Int) in // contents } c: { (x: Double) in // contents return 3 } // 클로져 표현 간소화 // 타입 유추 let inferType = names.sorted { (first, second) in return first > second } // 단축 인자 let shorthandArgument = names.sorted { return $0 > $1 } // 반환 타입 생략 let implicitReturn = names.sorted { $0 > $1 } // 연산자 함수 let operatorFunction = names.sorted(by: >)