Swift 2.2 뭐가 바뀌었나?

이번에 공식 릴리즈된 Swift 2.2는 Swift를 오픈소스화 한 후, GitHub를 통해 반영된 다양한 버그수정과 기능구현 들이 들어간 첫 공식버전입니다. Xcode 7.3과 함께 릴리즈 되었는데요, 무엇이 바뀌었는지 정리해 보았습니다. 이번 릴리즈는 Swift 3가 올해 하반기에 (원래 10월 목표) 발표될 예정인데 그 사이에 breaking change는 줄이고 가능한 코드레벨 호환성을 지키면서 다양한 버그 수정과 기능추가가 있었습니다.

아래 내용이 Swift 2.2의 모든 것은 아니고, 공식 릴리즈문서에서 이번에 적용되었다고 표시된 Swift Proposal들을 중심으로 정리하였습니다. 공식릴리즈 문서 는 여기서 확인하세요


++ , – 와 기존의 for loop 스타일이 deprecated

SE-0004 num++ 대신에 integer 나 float 에서는 num += 1을 쓰셔야 하고 Index 타입에서는 x = x.successor() 를 쓰시면 됩니다. ++을 쓴다고 당장 에러가 나는 것은 아닙니다. 다만 아래와 같이 3.0에서는 없어질 기능이니 수정하라고 나오고, 코드를 수정할 수 있도록 하는 화면이 뜹니다. Swift 3.0 이 나올때는 많은 수정사항이 있을테니, 미리미리 수정해두는 것이 좋겠죠?

이런 개발 뉴스를 더 만나보세요

++ 과 – 가 제거되는 이유는 a++ 과 ++a의 차이 같이 물론 명확하게 정의되어있긴 하지만 직관적이지 않은 표현들을 제거하기 위해서 라고 합니다. 그리고 이 표현을 가장 많이 쓰는 경우는 for 루프인데 어짜피 C-스타일 for loop 가 제거되므로 큰 불편도 없을거 같습니다.

C-스타일 for 루프 deprecated

이제는 아래와 같은 루프를 사용합시다.

for i in 1...10 {
    print("\(i) iphone")
}

array 를 가지고 루프를 돌 수도 있습니다.

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for number in array {
    print("\(number) green bottles")
}

오래된 C-스타일 for 루프는 3.0에서는 완전히 없어집니다.

Argument labels에서 더 많은 키워드를 사용가능

Argument labels (파라메터에 레이블을 주는 기능)은 Swift의 기능중 하나입니다. 아래와 같이 파라메터에 레이블을 붙여서 넘길 수 있습니다. 파라메터를 순서로 구분하지 않고 label 로 구분해서 이해하기 쉬운 코드를 작성할 수 있는 기능이죠.

for i in 1.stride(through: 9, by: 2) {
    print(i)
}

이 결과는 아래 코드와는 다릅니다. (stride 함수에서 through 와 to가 다르기 때문에) stride 문서 참고

for i in 1.stride(to: 9, by: 2) {
    print(i)
}

argument label에 쓸 수 있는 이름에 제약이 많았으나 Swift 2.2에서는 대부분의 키워드를 쓸 수 있게 되었습니다. 현재는 var, let 과 inout 를 쓸 수 없는데 이 제약도 Swift 3.0에서는 제거될 것이라고 합니다. 더 자세한 내용은 Proposal SE-0001 을 참고하세요

Tuple간의 비교가 가능

예전에는 불가능 했던 Tuple 간의 비교가 가능해졌습니다.

let singer = ("Taylor", "Swift")
let korea = ("Gangnam", "Style")

if singer == korea {
    print("Matching tuples!")
} else {
    print("Non-matching tuples!")
}

하지만 Tuple안에 아이템은 6개까지만 가능하다고 합니다. 더 자세한 내용은 Proposal SE-0015 을 참고하세요

associated 타입 선언을 방법 변경

typealias 라는 키워드로는 2가지 타입을 선언할 수 있었습니다.

  • Type Aliases
  • Associated Types

위 두가지가 다른 것임에도 불구하고 공히 typealias가 쓰이고 있었습니다. 이제 associated 타입 선언을 위해서는 typealias 대신에 associatedtype 를 사용하도록 변경되었습니다. 더 자세한 내용은 Proposal SE-0011 을 참고하세요

컴파일 타임에 Swift 버전 체크가능

Swift 2.2 는 아래와 같이 Swift 버전 체크를 위한 기능을 빌드 configuration 에서 지원합니다.

#if swift(>=2.2)
print("Running Swift 2.2 or later")
#else
print("Running Swift 2.1 or earlier")
#endif

더 자세한 내용은 Proposal SE-0020 을 참고하세요

기타

  • Swift Package Manager는 릴리즈 되려면 멀었다고 합니다.
  • 아직 리눅스에서는 많은 개선이 있지는 않다고 합니다. 이번 릴리즈에 Swift Core Libraries 는 포함되어있지 않지만, LLDB 와 the REPL는 포함되어있다고 하네요.
  • 문서도 업데이트 되었습니다. 여기 에서 확인하세요

컨텐츠에 대하여

이 컨텐츠는 저자의 허가 하에 이곳에서 공유합니다.


Realm Korea

Realm Korea Team

4 design patterns for a RESTless mobile integration »

close