시작하기 전
여러 변경사항이 있지만, 내가 받아들이고 이해할 수 있는 부분이나 필요한 부분만 정리합니다. 더 많은 변경사항을 보고 싶다면 여기를 방문해보세요.
Testing Integer Multiples
Swift 5에는 isMultiple(of:) 외 isEven, isOdd 와 같은 함수들이 추가됐다.
간단히 isMultiple(of:)를 보자.
// Swift 4.2
let firstNumber = 4
let secondNumber = 2
if secondNumber != 0 && firstNumber % secondNumber == 0 {
print("\(secondNumber) * \(firstNumber / secondNumber) = \(firstNumber)")
}
==========
// Swift 5
if firstNumber.isMultiple(of: secondNumber) {
print("\(secondNumber) * \(firstNumber / secondNumber) = \(firstNumber)")
}
아래가 새롭게 추가된 함수를 사용한 경우인데 무척 단순해졌고, 무엇보다 Argument로 0이 들어와도 동작한다.
Escaping Raw Strings
지금까지는 String에 "이 들어가려면 이렇게 써야했다.
let string = "누가 \"기침\"소리를 내었는가?"
그러나 이제 backslash를 자주 사용해야 하는 경우가 생기면 이렇게 하면 된다.
let string = #"누가 "기침"소리를 내었는가?"#
그러나 만약 String에 String Interploation을 써야하는 경우라면? 이렇게 하면 된다.
let 콜록콜록 = "기침"
let string = #"누가 "\#(콜록콜록)"소리를 내었는가?"#
Using New Character Properties
Character에 isNumber라는 Property 외에도 isWhiteSpace, isNewLine등 다양한 Property가 추가됐다.
// Swift 4.2
let id = "ID10"
var digits = 0
id.forEach { digits += Int(String($0)) != nil ? 1 : 0 }
print("Id has \(digits) digits.")
==========
// Swift 5
id.forEach { digits += $0.isNumber ? 1 : 0 }
Count(where:)
[1, 2, 3, 4, 5, 6, 7, 8]의 Array를 가지고 있다고 가정하고, 2의 배수의 count를 알고 싶다면?
// Swift 4.2
let array = [1, 2, 3, 4, 5, 6, 7, 8]
let evenNumberCount = array.filter { $0 % 2 == 0 }.count // 4
==========
// Swift 5
let evenNumberCount = array.count { $0 % 2 } // 4
Compacting Dictionaries
Swift 고차함수에서 봤던 map, filter, reduce, compactMap 중 Dictionary에서는 compactMap을 사용하지 못했다.
이제 compactMapValues(_:)을 지원한다.
// Swift 4.2
let students = ["Oana": "10", "Nori": "ten"]
let filterStudents = students.mapValues(Int.init)
.filter { $0.value != nil }
.mapValues { $0! }
let reduceStudents = students.reduce(into: [:]) { $0[$1.key] = Int($1.value) }
==========
// Swift 5
let mapStudents = students.compactMapValues(Int.init)