2014년 9월 16일 화요일

Swift - Xcode 6.1 Beta 2 변경점

Xcode 6.1 Beta 2가 또 한국 시간 화요일에 릴리즈 되었다. 아마도 한국시간 화요일이 릴리즈 날짜임은 확실한 것 같다. -_-;;;;

어쨌거나 이번에도 스위프트(Swift)와 관련한 변화를 살펴본다. 생각보다 양은 적어서 정리하기엔 편한 것 같다.

Swift 1.1 버전이 도입되었다. Xcode 6.0 GM 버전에서 1.0이 되었는데 벌써 1.1을 준비하고 있다. 물론 이 버전 넘버링은 스위프트 언어 문법(Syntax)과 관련이 많겠지만 라이브러리(Swift Standard Library)도 같이 변한다고 생각하자.

역시나 프레임워크 업데이트들이 많다. 굳이 상세히는 거론하진 않는다. 다만, 개인적인 체감으론 기존의 특정 클래스의 메소드에서 옵셔널을 리턴하던 형태가 이제는 생성자가 옵셔널을 리턴하는 형식(init? - failable initializer)으로 많이 바뀐 것 같다. 예를 들어 NSCalendar의 경우 기존이라면
let calendar = NSCalendar()
let components = calendar.components(...)
와 같은 방식으로 사용했었는데 이젠 생성자가 nil을 리턴 할 수도 있기 때문에 사용법이 좀 바뀌었다. 느낌표(!)를 이용해 옵셔널을 벗겨내거나 혹은 아래와 같이 사용하자.
if let calendar = NSCalendar() {
    let components = calendar.components(...)
}
이 변화 때문에 내가 만들어 둔 수 많은 코드를 수정해야만 했다. 귀찮아!

main 코드를 대체하기 위한 @NSApplicationMain 심볼이 등장했다. 이는 iOS용 @UIApplicationMain과 사용용도가 비슷하다.

RawRepresentable 프로토콜이 추가되었다. 이제 .fromRaw() 대신 생성자의 rawValue 파라미터를 이용해 생성해야하고, .toRaw() 메소드 대신 .rawValue 프로퍼티로 값을 읽어야 한다.
enum Foo: Int {
    case A = 0, B = 1, C = 2
}

let foo = Foo(rawValue: 2)! // formerly 'Foo.fromRaw(2)!’
println(foo.rawValue)       // formerly 'foo.toRaw()'
덕분에 역시나 내 코드들에 변화가 많이 생겼다.

참고: 만약 Xcode를 업그레이드 했는데 빌드 시 unimplemented initializer 류의 링크 에러가 발생하면 Derived Data를 삭제해 보자.

관련글:

댓글 없음 :