From cc384f05ce9ffac7b2781108363f37f21334bb28 Mon Sep 17 00:00:00 2001 From: songyc macbook Date: Sun, 25 Jan 2026 20:34:29 +0900 Subject: [PATCH] logseq 20260125 --- pages/Swift.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/pages/Swift.md b/pages/Swift.md index d5303be..546117b 100644 --- a/pages/Swift.md +++ b/pages/Swift.md @@ -80,6 +80,55 @@ deck:: Logseq/coding tip let result = numbers.map { $0 * 2 } // 클로저 문법에 따라 입력 변수를 그냥 $0, $1 형태로 해서 바로 사용하는 것도 가능함 ``` + - ### **◼︎ .reduce()** + - **기능** + - {{c1 컬렉션(Collection)}}의 모든 요소를 순회하며, 주어진 {{c1 클로저(결합 규칙)}}를 적용해 {{c1 누적된 하나의 결과를 }} 반환하는 함수. + id:: 6975f46d-f557-41c8-871a-40e157662aa6 + - **사용형태 및 예시** + - reduce() 기본형 + - 매 단계마다 {{c1 새로운 값을 생성(Return)}} 하여 다음 클로저의 첫번째 인자로 넘겨줌. 즉 결합 클로저의 반환타입이 reduce의 반환 타입과 일치해야함. + extra:: 숫자 합계 등 가벼운 데이터 타입 때 적합. + id:: 6975faa2-da0b-4182-8e54-b5035e84ad99 + - 배열 arr가 주어졌을 때 그 배열의 누적값 sum를 구하는 코드는 ? #card + id:: 6975fa93-e64e-4dea-972a-6ef9148b5618 + - ```swift + let arr = [1, 2, 3, 4] + let sum = arr.reduce(0, { (currentSum: Int, num: Int) -> Int in + return currentSum + num + }) + + // 클로저 최적화 기법을 쓸 경우 + let sum = arr.reduce(0){$0 + $1} // 후행 클로저 + let sum = arr.reduce(0, +) // 연산자 자체가 이미 클로저 + ``` + - reduce(into: ) 값 수정형 + - into 키워드로 넣어준 변수를 {{c1 수정하면서}} 값을 누적시킨다. 즉 결합클로저는 이 변수를 {{c1 수정하는 기능}}을 수행하기 때문에 클로저의 첫번째 인자는 {{c1 inout 타입}}으로 선언되어야 하고 반환 타입은 {{c1 void}} 이다. + extra:: 미리 선언한 변수를 into에 넣을 경우 그 원본변수는 수정되지 않고 reduce 함수 시작시 사용될 변수의 초기값이 그 원본변수의 값이 될 뿐이다. + id:: 6975fcf5-a69a-4abc-8a5c-88ea3f6ebbb7 + - 문자들의 배열 chars의 모든 요소를 합쳐서 하나의 문자열 str로 반환하라. #card + id:: 6975f952-6a13-45fd-b7a7-78815ca634a7 + - ```swift + let chars = ["a", "b", "c"] + let str = chars.reduce(into: "", { (result: inout String, char: String) in + result.append(char) + }) + + //클로저 최적화 + let str = chars.reduce(into: ""){$0.append($1)} + ``` + - 문자열 letters의 각 알파벳 별 빈도수를 출력하라 #card + id:: 6975feb8-3361-42c2-b913-2f7a70d731b6 + - ```swift + let letters = "abracadabra" + + // 딕셔너리에 문자별 등장 횟수 누적 + let counts = letters.reduce(into: [:]) { counts, letter in + counts[letter, default: 0] += 1 + } + + print(counts) + ``` + - - - ## **► 클로저(Closure)** - ### **◼︎ 정의** #card