[swift2.2] Xcode 7.3 Swift 언어 변경사항

Swift 2016. 3. 24. 00:10

Xcode7.3 Release Notes



Playground

  • iOS, OS X의 Live view는 사용자 인터랙션을 지원합니다.
  • rich comment가 인라인 video display를 지원하도록 개선되었습니다. Video 태그를 사용해 비디오 파일을 읽어올 수 있으며, 대체 텍스트, 커스텀 poster 프레임, width, height 스펙에 대한 옵션을 제공합니다. Markup Formatting Reference.Video 챕터 참고.
  • XCPlaygroundPage.captureValue(_:withIdentifier:) 가 deprecated 되었습니다.



Swift

  • 새롭게 지원하는 #if swift(>=x.y) 구문을 사용해서 빌드 환경을 구분할수 있습니다. inactive 분기문에 있는 코드는 파싱되지 않고, 문법진단에서 제외되기 때문에 같은 파일에서 다른 버전의 swift 소스코드를 혼합하여 사용할 수 있습니다.




  • 모든 slice type은 removeFirst() 와 removeLast() 메서드를 갖습니다. 




  • C 의 익명구조체들은 swift의 중첩 구조체 타입으로 임포트 됩니다.



  • 3개의 문서 코멘트 필드가 추가되어, 사용자가 더 효과적으로 코드완성 엔진과 상호동작하도록 지원합니다.

    • keyword:
    • recommeded:
    • recommendedover:


  • 클래스 내부에서 failable(init?) 또는 예외를 던지는(init() throws) designated initializer 는 모든 저장속성을 초기화 하기 전에 또는 super.init() 을 호출하기 전에 종료할 수 있습니다. 이 동작은 designated initializers 가 convenience initializers 와 더 일관적이게 합니다. convenience initializers 역시 self.init() 을 수행하기 전에 실패할 수 있습니다.




  • Curried 함수 문법이 deprecated 되었으며, Swift3에서 삭제된다고 합니다.




  • ++, -- 연산자들도 deprecated 되었으며, Swift3에서 삭제된다고 합니다. 대신 정수와 부동소수에서는 x += 1, Index 타입에서는 x = x.successor() 을 사용하세요.




  • 프로토콜의 연관타입은 typealias를 대체하여 새로운 associatedtype 을 사용할 수 있습니다. typealias 키워드는 swift2.2에서는 여전히 지원하지만 deprecated 되었으며 warning을 생성합니다. 이 warning은 Swift3에서는 에러가 될 것입니다.
protocol P {
  associatedtype Ty
}




  • 함수 또는 생성자를 참조할때, 인자 레이블을 포함한 완전한 이름을 사용할 수 있습니다.




  • #file, #line, #column, #function 표현식이 추가되어 _FILE_, _LIN__, _COLUMN, _FUNCTION_ 를 대체합니다. FILE__ 스타일의 심볼은 deprecated 되었으며 Swift3에서 삭제될 예정입니다.




  • 글로벌 anyGenerator() 함수는 좀더 직관적이고 자연스로운 API 스럽게 AnyGenerator 구조체의 생성자로 변경되었습니다. anyGenerator() 는 Swift2.2에서 deprecated 되었으며, Swift3에서 삭제될 예정입니다.



  • 생성된 Objective-C 선언에서 rename 을 지원하도록, @objc(SomeName) 속성을 enum 과 enum case에도 사용할수 있습니다.



  • Swift 메서드의 Objective-C 셀렉터는 #selector 표현식을 사용하여 직접적으로 설정할 수 있습니다. 기존의 string 리터럴을 셀렉터로 사용하는 방식은 deprecated 되었습니다.

let sel = #selector(insertSubview(_:aboveSubview:)) // sel은 Selector 타입
let sel: Selector = "insertSubview:aboveSubview:"   // deprecated

string 리터럴을 사용하는 방식은 #selector를 사용한 방식으로 대체되어야 하며, 컴파일러가 #selector로 변경되도록 수정을 지원합니다. 다음의 방법으로 직접 셀렉터를 생성하는 것도 유효합니다.

let sel = Selector("propertyName")