검색결과 리스트
indirect에 해당되는 글 1건
- 2015.07.30 [swift2] Xcode7 beta4 Swift 언어 변경사항
글
[swift2] Xcode7 beta4 Swift 언어 변경사항
Swift
2015. 7. 30. 00:12
드디어 Xcode7 beta4가 공개되었네요! beta4 에서 Swift 언어 변경사항에 대해 알아볼까요?
Objective-C Language Changes
1. 더블 언더스코어 nullability 한정자들 이름이 변경되었습니다.
- as is: __nullable, __nonnull, __null_unspecified
- to be: _Nullable, _Nonnull, _Null_unspecified
- 소스 호환성을 위해 컴파일러가더블 언더스코어 이름을 새로운 이름으로 맵핑하는 매크로를 정의해줍니다.(predefine)
Swift Language Changes
1. Enum과 Case에 indirect 키워드를 사용할 수 있습니다.
- indirect 키워드를 사용해서 재귀적인 데이터 구조를 정의할 수 있음.
- 재귀적인 데이터 구조 정의시 enum의 연관값은 간접적으로 저장됨
enum List<T> {
case Nil
indirect case Cons(head: T, tail: List<T>)
}
indirect enum Tree<T> {
case Leaf<T>
case Branch(left: Tree<T>, right: Tree<T>)
}
2. class 객체를 참조하는 AnyObject, NSObject 변수를 class Object 타입으로 복원이 가능합니다.
let x:AnyObject = NSObject.self // NSObject 클래스 객체를 AnyObject로 캐스팅
let y = x as! NSObject.Type // AnyObject를 NSObject 클래스 객체로 복원
3. class 객체를 포함하는 Array,Dictionary,Set 을 NSArray,NSDictionary,NSSet로 브리징할 수 있습니다.
- [NSURLSessionConfiguration protocolClasses]과 같이 NSArray * 객체를 반환하는 Objective-C API도 이제 Swift에서 정상동작합니다.
4. 클래스에 적용한 @objc 속성은 Objective-C 헤더에 생성된 클래스의 컴파일타임 이름 뿐만 아니라 런타임 이름도 변경합니다.
- 프로토콜에도 적용됨
// Swift
@objc(MyAppDelegate)
class AppDelegate : NSObject, UIApplicationDelegate {
//...
}
// Objective-C
@interface MyAppDelegate : NSObject <UIApplcationDelegate>
// ...
@end
5. 스칼라값의 0 엘리먼트를 참조하는 기능은 제거되었습니다.
6. 타입검사 제약시스템이 생성한 에러 진단메시지가 beta4에서 개선되었습니다. 이후 베타버전에서 더 많은 부분들이 개선될 예정입니다.
7. SinkType 프로토콜과 SinkOf 구조체가 표준 라이브러리에서 제거되고 대신 (T) -> () 클로져를 사용합니다.
8. ExtensibleCollectionType 부모프로토콜이 서브 프로토콜 RangeReplaceableCollectionType로 통함되었습니다.
- RangeReplaceableCollectionType 은 subRange를 다른 컬렉션의 엘리먼트들로 교체를 지원하는 컬렉션 타입.
- 기본구현을 위한 메소드들이 추가됨.
- 이 프로토콜들과 연관된 (free) Swift 모듈 함수들 대신 이 메서드들을 사용할 수 있습니다.
9. Unmanaged를 사용한 속성과 메서드들도 Objective-C에 노출가능합니다.
- Unmanaged는 unmananged 객체 레퍼런스를 전달하기 위한 타입.
- 이 타입을 사용하면 객체가 살아있도록 유지할 책임이 있음.
10. performSelector 류의 API 들 Swift 코드에서 사용가능합니다.
11. __unsafe_unretained로 마크된 C 구조체 필드는 Swift에 Unmanaged 로 표시됩니다.
- Swift 컴파일러는 이 참조들이 실제로 strong(+1) 또는 unretained(+0)로 의도되었는지는 알수 없음.
12. Swift 문서 주석들은 최상위 목록아이템을 인식합니다.
- Throws: ... 구문은 어떤 에러가 왜 던져질수 있는지 문서화하기 위해 사용합니다.
- Xcode QuickHelp의 파라미터 및 반환값 설명 옆에 표시됩니다.
13. 타입은 그 타입보다 더 낮은 버전에서 가용한 프로토콜을 구현할 수 있습니다.
@available (iOS 9.0, *)
protocol P { ... }
@available (iOS 7.0, *)
class MyController : UIViewController, P {
...
}
'Swift' 카테고리의 다른 글
| [swift1.2] Swift 프로토콜 지향 프로그래밍 (0) | 2015.08.06 |
|---|---|
| [swift] 문자열과 문자 -1 (Strings and Characters) (0) | 2015.08.01 |
| [swift2] Xcode7 beta4 Swift 언어 변경사항 (0) | 2015.07.30 |
| [swift] 성능향상 시키기 - 다이나믹 디스패치를 최소화 (0) | 2015.07.16 |
| [swift2] Xcode7 beta3 Swift 언어 변경사항 (0) | 2015.07.11 |
| [swift2] Swift에서 에러 처리 (Error Handling) (0) | 2015.07.10 |
