검색결과 리스트
글
[swift2] Xcode7 beta3 Swift 언어 변경사항
Swift Language Changes
1. 표현식 결과 포맷팅 방식 변경
po 또는 expr -O를 사용할 때 Swift 표현식 결과를 포맷팅하는 방식이 beta3에서 상당히 변화되었습니다.
첫 번째 beta 버전에서 소개되었던 Customization이 다음과 같은 방식으로 개선되었습니다.
CustomDebugStringConvertible 또는 CustomStringConvertible 프로토콜을 구현하는 타입들은
상대적으로 debugDescription, description 메소드를 사용하여 포맷팅 결과를 제공합니다. 둘다 구현하지 않은경우
타입이름이 출력되고, 레퍼런스 타입들은 Objective-C 클래스처럼 참조되는 주소를 보여줄 것입니다.레퍼런스 타입들과는 다르게 enums, tuples, struct 같은 value 타입들은 디폴트로 summary 아래에 모든 멤버들이
들여쓰기 되어 보여질것입니다. CustomReflectable 구현함으로써 이러한 동작들을 커스터마이징 할수 있습니다.
출력 커스터마이징은 모든 필드와 값들의 리스트를 제공하기 위해 p 또는 expr을 -O옵션없이 사용해서 건너뛸 수 있습니다.
2. String 타입 Enum의 기본값
string raw타입으로 선언된 enum 엘리먼트가 명시적으로 raw value를 갖지 않으면, enum의 이름을 디폴트 텍스트로
갖습니다.
예를 들어 다음 선언은
enum WorldLayer : String {
case Ground, BelowCharacter, Character
}
아래와 동일합니다.
enum WorldLayer : String {
case Ground = "Ground"
case BelowCharacter = "BelowCharacter"
case Character = "Character"
}
3. 이름 없는 파라미터
이름없는 파라미터는 명시적으로 이름이 없음을 의미하는 _:를 사용합니다**. 예를 들어 다음은 이제 에러입니다.
func f(Int) {} // 에러
다음과 같이 작성되야합니다.
func f(_:Int) {}
이것이 인자의 레이블 모델을 단순화시킵니다.
그리고 func f((a: Int, b:Int)) 같은 경우에 a 그리고 b라는 이름의 파라미터를 가지지 않는지 명료하게 해줍니다.
4. array에 tuple 추가가 가능합니다.
5. Objective-C 클래스의 제네릭 서브클래싱이 지원됩니다.
6. 문법이 조정되어 .으로 시작하는 라인들은 항상 메서드 또는 프로퍼티 룩업으로 파싱되어 다음과 같은 코드 포맷팅이 가능합니다.
foo
.bar
.bas = 68000
문맥에 따른 static member looup 으로 시작하는 라인은 더이상 사용 불가능합니다.
.staticVar = MyType()
7. try!
try! 표현식에서 발생한 에러, 최상위 또는 playground에서 처리되지 않은 에러들은 trap 메시지에 에러 값들이 표시됩니다.
8. NS_REFINDED_FOR_SWIFT 매크로
오리지널 구현을 사용가능하면서도, Swift의 동일 API에서는 더 좋은 버전을 제공하기 위해 NS_REFINED_FOR_SWIFT
매크로는를 Objective-C 선언부에 사용할수 있습니다. 예를 들어 클래스를 인자로 받는 Objective-C API는 Swift에서는
파라미터 타입을 더 정밀하게 제공할수 있습니다.
NS_REFINDED_FOR_SWIFT 매크로는 경우에 따라 다르게 동작합니다.
- init 메소드는 첫 번째 외부 파라미터 이름에 __이 붙는 initializer가 임포트 됩니다.
- (instancetype)initWithClassName:(NSString*)name NS_REFINED_FOR_SWIFT
=> init(__className:String)
- 다른 메소드들은 기본이름에 __이 붙어 임포트 됩니다.
- (NSString*)displayNameForMode:(DisplayMode)mode NS_REFINED_FOR_SWIFT;
=> func __displayNameForMode(mode:DisplayMode) -> String
subscript 메소드는 다른 메서드들처럼 취급되며 subcript로 임포트 되지 않습니다.
다른 선언들은 이름 앞에 __이 붙습니다.
@property DisplayMode mode NS_REFINED_FOR_SWIFT;
var __mode:DisplayMode { get set }
9. 타입 제네릭 파라미터
Swift 표준 라이브러리에서 제공하는 타입 제네릭 파라미터들은 API에서 타입의 역할을 반영하도록 이름이 변경되었습니다.
예를 들어 Array
'Swift' 카테고리의 다른 글
| [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 |
| [swift2] 타입의 텍스트적인 표현 커스터마이징하기 (0) | 2015.07.01 |
| [swift2] Xcode7 beta2 Swift 언어 변경사항 (0) | 2015.06.24 |