1. 여러 문자 기준으로 문자열 나누기

var str = "baconlettucetomato" // a, b, c 기준으로 나눠야 함 ["onlettu", "etom", "to"]

// 1. split의 whereSeparator 사용하기
let result = str.split(whereSeparator: [a, b, c].contains).map { String($0) }

// 2. split에 조건 설정하기
let result = str.split($0 == "a" || $0 == "b" || $0 == "c" ).map {.String($0) }

2. 딕셔너리 default값 사용하기

// 기존 방법, 해당 value가 존재 하지 않을 수 잇기 때문에
// if let, 또는 != nil 등 옵셔널 체크가 필요했음
dic.forEach {
    if let count = dict[$0] {
        dict[$0] = count + 1
    } else {
        dict[$0] = 1
    }
}

// default 사용, 접근했을 때 값이 없으면 nil이 아닌 기본값(default)로 설정된 후 접근 됨
dic.forEach {.dic[$0, default: 0] += 1 }

3. 함수 본문이 한줄인 경우 기본적으로 반환값으로 취급, return 키워드 생략 가능

func sum(a: Int, b: Int) {
		a + b
}

4. 문자열의 앞이나 뒤부터 주어진 수만큼 가져오기

let str = "Hello, World!"
let subPreStr = str.prefix(5)  // Substring "Hello"
let newPreStr = String(substr) // String "Hello"

let subSufStr = str.suffix(6) // Substring "World!"
let newSufStr = String(subSufStr) // String "World!"

// 반환값은 subString이며 String을 참조한다.
// 그렇기 때문에 String과 비교 가능

5. 원하는 Int 범위 Array생성

Array(3...10) // 1.
[Int](start...end) // 2.
(start...end).map { $0 } // 3.
// [3, 4, 5, 6, 7, 8, 9, 10]

6. 고차함수 reduce 클로저 표현 의미

arr.reduce(0) { $0 + $1 }
// (0): 초기누적 값
// $0: 현재 누적 값
// $1: 현재 요소 값

7. 문자열 대소문자