iOS/정리
[Swift] 기본문법 정리3 - 열거형/옵셔널 체이닝/클로저/클로저 간소화/고차함수
용그무스
2022. 11. 25. 16:24
열거형
// 원시값을 사용하는 열거형
enum 열거형: Type {
case a = value
}
열거형타입변수.a.rawValue
// 연관값을 사용하는 열거형
enum 열거형 {
case a(연관값Type)
}
var 열거형타입변수 = 열거형.a(연관값) // 연관값 초기화
열거형타입변수.a(let b) // b에 연관값을 대입하게 됨
옵셔널 체이닝
옵셔널 체이닝 - 옵셔널바인딩 없이 값에 접근
옵셔널타입변수?.프로퍼티 // 옵셔널타입 / Optional(value)
옵셔널타입변수!.프로퍼티 // 강제로 값만 추출
클로저
closure
- 참조타입
- 코드에서 사용할 수 있는 독립기능 블록
- 일급객채? 전달인자로 보냄, 변수/상수로 저장,전달 가능, 함수의 반환값 가능
- 익명의 함수
- 전달인자가 없음. 파라미터 값만 넘겨야함
{ (매개변수) -> 리턴타입 in // 헤드
실행구문 // 바디
}
// 파라미터X, 리턴타입X
let hello = { () -> () in
print("hello")
}
hello()
// 파라미터O, 리턴타입O
let hello2 = { (name: String) -> (String) in
return name
}
hello2("hello2")
// 함수의 파라미터로 클로저를 사용
func doSomething(closure: () -> ()) {
closure()
}
doSomething { () -> () in
print("hello3")
}
// 함수의 반환타입으로 클로저를 사용
func doSomething2() -> () -> () {
return { () -> () in
print("hello4")
}
}
doSomething2() // 클로저 네임..
doSomething2()() // 클로저() ...... print됨
클로저 간소화
// 후행클로저 - 마지막 매개변수로 전달되는 클로저만 사용가능
// 파라미터, 반환값이 없으면 in까지 생략가능
doSomething() {
print("hello3")
}
// 다중후행클로저 - 첫번째 클로저는 매개변수 생략가능
func doSomething3(closure1: () -> (), closure2: () -> ()){
closure1()
closure2()
}
doSomething3 {
print("closure1")
} closure2: {
print("closure2")
}
// 클로저 표현 간소화
func doSomething4(closure: (Int, Int, Int) -> Int){
closure(1, 2, 3)
}
doSomething4 {
$0+$1+$2
}
고차함수 - map & filter & reduce
// map - 배열의 요소에 접근 (기존배열.count = 새로운배열.count)
let numbers = [0,1,2,3]
let mapArray = numbers.map {
return $0 * 2
}
print("map - \(mapArray)")
// filter
let numbers2 = [10,50,33,354,544,20]
let filterArray = numbers2.filter {
$0 % 5 == 0
}
print("filter - \(filterArray)")
// reduce - 요소를 하나로 통합
let numbers3 = [0, 1, 2, 3]
let reduceResult = numbers3.reduce(4) { // 초기값
print ("Result - \($0), Element - \($1)") // result - 누적값, element - 요소
return $0 + $1
}
print("reduce - \(reduceResult)")