시작하기 전

  • 여러 변경사항이 있지만, 내가 받아들이고 이해할 수 있는 부분이나 필요한 부분만 정리합니다.
  • 더 많은 변경사항을 보고 싶다면 여기를 방문해보세요.

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

  • 스위프트 고차함수 사용법에서 봤던 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)