-
swift - Closureswift 2021. 1. 5. 17:47
Closure
self - contained code blocks
클로저는 비교적 짧고 독립적인 코드 조각
swift 에서 클로저로 분류되는 것은 세가지
함수처럼 first class citizen이다.
특이
1. func 키워드 없음
2. 모든 부분이 { } 안에 포함
3. paramers 부터 returnType까지를 closure head라고 하고, statements가 closure body -> in 키워드로 구분
4. 함수와 마찬가지로 파라미터와 리턴형을 생략할 수 있는데 이 경우 in 키워드도 같이 생략
그래서 가장 간단한 closure는 { statments } 형태
파라미터와 리턴형이 생략된 형태
파라미터와 리턴형이 있는 형태
자료형이 함수와 동일하기 때문에 함수와 호환가능하다
상수를 클로저에 저장 후 아규먼트로 전달
클로저를 직접 아규먼트로 선언
예제
let products = [ "MacBook Air", "MacBook Pro", "iMac", "iMac Pro", "Mac Pro", "Mac mini", "iPad Pro", "iPad", "iPad mini", "iPhone Xs", "iPhone Xr", "iPhone 8", "iPhone 7", "AirPods", "Apple Watch Series 4", "Apple Watch Nike+" ] // 문자열 배열중에서 Pro가 포함된 것만 필터링 var proModels = products.filter( { (name: String) -> Bool in return name.contains("Pro") }) print(proModels) // 필터링된 결과물 정렬 print(proModels.sorted()) // 대소문자에 관계없이 오름차순 정렬을 직접 구현 proModels.sort(by: { (lhs: String, rhs: String) -> Bool in return lhs.caseInsensitiveCompare(rhs) == .orderedAscending }) print(proModels)
print("Start") print("End") // 코드의 실행을 지연 // 첫번째 파라미터는 지연시킬 시간, 두번째 파라미터는 실행시킬 코드 // DispatchQueue.main.asyncAfter(deadline: .now() + 5, execute: <#T##() -> Void#>) DispatchQueue.main.asyncAfter(deadline: .now() + 5, execute: { print("End") }) // 밑에는 자동완성의 도움을 받아서 한건데 위의 코드와 완전히 동일한 코드 // 이런걸 Syntax Optimization : 문법 최적화 라고 부름 DispatchQueue.main.asyncAfter(deadline: .now() + 5) { print("End") }
'swift' 카테고리의 다른 글
swift - Capturing Values (0) 2021.01.05 swift - Closure Syntax Optimization (0) 2021.01.05 swift - Nested Functions (0) 2021.01.05 swift - Function Types (0) 2021.01.05 swift - Function Notation (0) 2021.01.05