간략한 스위프트 문법/사용법 정리
🧐 고차함수 (Higher-order function)
매개변수로 다른 함수를 받거나, 실행된 결과를 다시 함수로 반환하는 함수를 고차함수라고 한다.
스위프트 표준 라이브러리에서는 여러 유용한 고차함수를 제공한다.
📎 map
원소 전체를 순회하는 로직을 간결하게 처리할 수 있음.
let names = ["kim", "lee", "min", "john"]
// 기본형
let names1 = names.map { (name) in
return name + "님"
}
// 축약형
let names2 = names.map { $0 + "님" }
// 문자열의 길이
let names3 = names.map { $0.count }
print(names1)
print(names2)
print(names3)
// 출력:
// ["kim님", "lee님", "min님", "john님"]
// ["kim님", "lee님", "min님", "john님"]
// [3, 3, 3, 4]
위와 같은 로직을 for-in 문으로 작성했다면, 코드가 좀 더 길어졌을 것이다.
📎 filter
전달받는 배열의 모든 원소에 대해, 조건에 부합하는 원소만을 반환하는 함수.
let names = ["kim", "lee", "min", "john"]
// 기본형
let filterNames = names.filter { (name) -> Bool in
name.count > 3
}
// 축약형
let filterNames2 = names.filter { $0.count > 3 }
print(filterNames)
print(filterNames2)
// 출력:
// ["john"]
// ["john"]
📎 reduce
모든 원소에 대해 '+', '-' 등 연산을 수행한 결과를 반환한다.
// 기본형
let names = ["kim", "lee", "min", "john"]
let reduceNames = names.reduce("text: ") { (first, second) -> String in
first + second
}
print(reduceNames)
// 출력: "text: kimleeminjohn"
// 축약형
let numberArr = [1, 2, 3, 4, 5]
let sumNum = numberArr.reduce(0) { $0 + $1 }
print(sumNum)
//출력: 15
📎 compactMap
map과 동일하게 동작하면서, 원소가 nil값인 경우 안전하게 해당 원소를 무시해준다.
let numberArr = [1, 2, 3, 4, 5, nil, 7, nil, 9]
let compactMapNum = numberArr.compactMap { (num) in
return num
}
print(compactMapNum)
// 출력: [1, 2, 3, 4, 5, 7, 9]
📎 flatMap
[N차원] 배열을 [N-1 차원]의 배열로 만들어서 반환해준다.
// 2차원 -> 1차원
let numbers = [[1,2,3], [4,5,6]]
let flatNum = numbers.flatMap { ($0) }
print(flatNum)
// 출력: [1, 2, 3, 4, 5, 6]
// 3차원 -> 2차원
let numbers2 = [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]
let flatNum2 = numbers2.flatMap { ($0) }
print(flatNum2)
// 출력:
// [[1, 2, 3],
// [4, 5, 6],
// [7, 8, 9],
// [10, 11, 12]]
'iOS(macOS) > Swift' 카테고리의 다른 글
[iOS/Xcode 13] Rename - Outlet 변수 이름 수정 방법 (0) | 2022.08.15 |
---|---|
[iOS/Xcode 13] 시뮬레이터 키보드 보이게 하는 법 (0) | 2022.08.15 |
[Swift/문법] 프로토콜 (Protocol) (0) | 2022.08.10 |
[Swift/문법] 익스텐션(Extension) (0) | 2022.08.10 |
[Swift/문법] 클래스(Class), 구조체(Structure) (0) | 2022.08.10 |