diff --git a/pages/Swift.md b/pages/Swift.md index e73358c..789d10a 100644 --- a/pages/Swift.md +++ b/pages/Swift.md @@ -1,6 +1,6 @@ deck:: Logseq/coding tip -- ## **► 배열 선언 및 초기화 +- ## **► 배열 선언 및 초기화** - ### **◼︎ 1차원 배열** - #### **● 1부터 10까지를 요소로 가지는 배열 생성하기(2가지 방법)** #card id:: 691ed199-9a79-4333-9bb2-7795990e158e @@ -29,7 +29,7 @@ deck:: Logseq/coding tip } ``` - -- ## **► 고차함수 모음 +- ## **► 고차함수 모음** - ### **◼︎ .map()** - #### **정의** #card id:: 691edbcd-37ca-425c-85bb-f5ea0a45269d @@ -47,4 +47,58 @@ deck:: Logseq/coding tip let result = numbers.map { $0 * 2 } // 클로저 문법에 따라 입력 변수를 그냥 $0, $1 형태로 해서 바로 사용하는 것도 가능함 + ``` +- +- ## **► 클로저(Closure)** + - ### **◼︎ 정의** #card + id:: 69203197-090a-42f4-9a92-16efb9516eca + - swift에서 사용되는 익명함수 기능을 통칭하는 용어 + - 일급 객체로서 변수/상수에 저장도 가능하고 함수의 파라미터로 전달하거나 리턴값으로 사용 가능. + - ### **◼︎ 문법** + - **● 기본문법** #card + id:: 6920321b-21c3-4661-a415-debd1460f764 + - ```swift + // 기본 형태 + {(매개변수) -> 반환타입 in 실행구문} + + // 변수 대입 + let sum_nums = {(a: Int, b: Int) -> Int in return a+b} + ``` + - **● 문법최적화(sorted 함수를 기준으로 단계별로 최적화 되는 것을 설명)** #card + id:: 69203294-17a2-4c7e-a0af-e3811397d73b + - ```swift + // 0. 전체 문법 + let sorted0 = nums.sorted(by: {(a: Int, b: Int) -> Bool in + return a < b + }) + + // 1. 타입유추 + // 파라미터의 타입을 추정할 수 있다면 생략이 가능하다 + let sorted1 = nums.sorted(by: {(a, b) in + return a < b + }) + + // 2. 암시적 변환 + // 클로저 내부의 코드가 단 한줄이면 return 키워드를 생략 가능 + let sorted2 = nums.sorted(by: {(a, b) in + a < b + }) + + // 3. 단축 인자 이름 + // 매개변수도 생략하고 첫번째 인자는 $0, 두번째 인자는 $1 로 해서 사용가능 + let sorted3 = nums.sorted(by: { + $0 < $1 + }) + + // 4. 후행클로저 + // 함수의 매개변수 중 클로저가 1개이고 가장 마지막으로 들어가는 인자일 경우 + // 클로저 자체의 중괄호를 소괄호 밖으로 뺄 수 있음 + // 고차함수의 인자가 클로저 1개 뿐일 경우에는 + // 소괄호 자체도 생략해서 클로저만 붙이는것도 가능 + let sorted4_1 = nums.sorted(){$0 < $1} + let sorted4_2 = nums.sorted{$0 < $1} + + // 참고사항 + // 연산자는 (<, >) 그 자체로 이미 클로저이기에 바로 넘길 수 있음 + let sorted5 = nums.sorted(by: <) ``` \ No newline at end of file