일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- SwiftUI
- swift
- ios
- 반응형
- 프로토콜
- 디자인 패턴
- AppStore
- struct
- 협업
- 기초문법
- 이론
- async
- 네트워크
- 세종대학교
- 토이프로젝트
- forEach
- CS
- 실습
- collectionview
- uikit
- mvc
- RxSwift
- 구름톤 유니브
- 앱개발
- MVVM
- WeatherKit
- 스트럭트
- 학과별커뮤니티
- 딕셔너리
- 대표
- Today
- Total
스윞한 개발자
Swift 기초 문법 - private(set)/foreach, enumerate/compactMap/flatMap 본문
차근차근 하나씩 알아보겠습니다!
- private(set)
스위프트에서 private(set)은 변수나 속성을 정의할 때 사용하는 액세스 제어자 중 하나입니다.
액세스 제어자는 해당 변수나 속성이 어디서 접근 가능한지를 제어하는 역할을 합니다.
private(set)은 두가지 목적을 가지고 있습니다.
private(set)으로 선언한 변수는 해당 변수를 선언한 같은 파일 내에서는 읽기와 쓰기가 모두 가능합니다.
즉, 변수에 접근해서 값을 변경하는 것이 가능합니다.
**하지만** 다른 파일이나 모듈에서는 해당 변수에 접근해서 값을 변경할 수 없습니다. 즉, 변수의 쓰기 권한은 private이지만, 읽기 권한은 'private(set)'으로 확장된 것입니다.
class Example {
private(set) var privateSetVariable: Int = 10
private var privateVariable: Int = 20
func doSomething() {
privateSetVariable = 30 // 가능
privateVariable = 40 // 가능
}}
다른 파일에서 ↓
func accessExampleVariable() {
let example = Example()
// example.privateSetVariable = 50 // 에러: private(set) 속성이므로 다른 파일에서는 쓰기가 불가능합니다.
// example.privateVariable = 60 // 에러: private 속성이므로 다른 파일에서는 접근이 불가능합니다.
let value = example.privateSetVariable // 읽기는 가능합니다.
// let value = example.privateVariable // 에러: private 속성이므로 다른 파일에서는 접근이 불가능합니다.
print(value) // 출력: 30 (doSomething() 메서드에서 변경된 값)
}
private(set)은 주로 캡슐화와 정보 은닉을 위해 사용됩니다. 내부 상태를 외부에서 직접 변경하지 못하게 하면서(getter로 값을 읽을 수 있게 하면서) 클래스의 일부 API를 제공할때 유용합니다.
- foreach enumerated
forEach와 enumerated는 스위프트에서 배열과 컬렉션을 다루는 데에 유용한 기능들입니다.
1. forEach :
forEach는 배열 또는 컬렉션의 모든 요소를 반복하면서 각 요소에 대해 특정 작업을 수행할 때 사용됩니다.
배열의 모든 요소를 순회하며 각 요소에 대해 주어진 클로저를 실행합니다.
array.forEach { element in
// 각 요소(element)에 대해 수행할 작업
}
let numbers = [1, 2, 3, 4, 5]
numbers.forEach { number in
print(number)
}
2. enumerated :
enumerated는 배열 또는 컬렉션의 요소와 함께 해당 요소의 인덱스에 접근해야 할 때 사용됩니다.
이 메서드를 사용하면 각 요소와 해당 요소의 인덱스가 튜플 형태로 제공됩니다.
for (index, element) in array.enumerated() {
// index와 element에 대해 수행할 작업
}
>> let fruits = ["Apple", "Banana", "Orange"]
for (index, fruit) in fruits.enumerated() {
print("Index: \(index), Fruit: \(fruit)")
}
>> 결과 :
Index: 0, Fruit: Apple
Index: 1, Fruit: Banana
Index: 2, Fruit: Orange
- compactMap
스위프트에서 배열 또는 다른 컬렉션을 변환하거나 필터링하는 데 사용되는 함수 중 하나입니다.
각 요소에 대해 변환 클로저를 실행하고, 변환 결과 중에 nil이 아닌 값들로 이루어진 새로운 배열을 반환합니다.
map 과의 주요 차이점은 compactMap이 nil을 걸러 내고 값을 추출하여 새 배열을 생성한다는 점입니다.
let stringArray = ["1", "2", "3", "four", "5"]
let intArray = stringArray.compactMap { Int($0) }
print(intArray) // 출력: [1, 2, 3, 5]
또한 컬렉션 내부의 옵셔널 값을 추출하고자 할 때에도 유용합니다.
let optionalIntArray: [Int?] = [1, 2, nil, 4, nil, 6]
let nonNilIntArray = optionalIntArray.compactMap { $0 }
print(nonNilIntArray) // 출력: [1, 2, 4, 6]
- flatMap
flatMap은 스위프트에서 배열 또는 다른 컬렉션을 변환하거나 평탄화하는 데 사용되는 함수 중 하나입니다.
이 함수는 각 요소에 대해 변환 클로저를 실행하고, 변환 결과 중에서 nil이 아닌 값들을 추출하여 하나의 평탄한 배열로 반환합니다.
let nestedArray = [[1, 2, 3], [4, 5], [6, 7, 8]]
let flattenedArray = nestedArray.flatMap { $0 }
print(flattenedArray) // 출력: [1, 2, 3, 4, 5, 6, 7, 8]
flatMap은 각 중첩 배열을 하나의 배열로 펼치고, 모든 값들을 하나의 평탄한 배열로 만듭니다.
flatMap은 옵셔널 값을 가진 배열에서 nil이 아닌 값들로 이루어진 배열을 생성하거나 변환하는 데에도 사용될 수 있습니다.
let optionalIntArray: [Int?] = [1, 2, nil, 4, nil, 6]
let nonNilIntArray = optionalIntArray.flatMap { $0 }
print(nonNilIntArray) // 출력: [1, 2, 4, 6]
출처 : 개발하는 정대리
'Swift 이론' 카테고리의 다른 글
Swift 기초 문법 - 의존성 주입 Dependency (0) | 2024.01.25 |
---|---|
Swift 기초 문법 - class func vs static func (0) | 2024.01.24 |
Swift 기초 문법 - lazy 키워드 (0) | 2024.01.24 |
Swift 기초 문법 - 고차함수 Higher Order Functions (0) | 2024.01.23 |
Swift 기초 문법 - 별칭/typealias, Set (0) | 2024.01.23 |