티스토리 뷰
얼마 전 Swift 1.2 버전으로 업그레이드를 실시했다. 뭐, 자의에 의해서 한 것은 아니고, Xcode 6.3.1 버전으로 업데이트 하니 자연스럽게 Swift 언어 버전도 업데이트 된 것!
다음은 Swift 1.2 로 업데이트하면서 나에게 발생한 오류를 정리해 본다.
1. NSString
과 String
타입 캐스팅(형변환)은 명시적으로 하도록 변경
이렇게 동작하던 코드는 더 이상 암시적으로 캐스팅을 하면 안된다.
func print(string: String) {
// print
}
let str : NSString = “POWERUMC”
print(str)
Swift 1.2 부터는 위의 코드는 다음과 같이 명시적으로 캐스팅을 해야 한다.
func print(string: String) {
// print
}
let str : NSString = “POWERUMC”
print(str as String)
2. 다운케스팅은 as!
키워드를 사용하도록 변경
모든 상속 관계의 타입 캐스팅(형변환)은 as
키워드를 사용했지만 이제 다운케이팅의 경우는 as!
를 사용하도록 변경되었다.
request.mutableCopy()
메서드의 반환 타입이 AnyObject
인데 이를 NSMutableURLRequest
로 as
키워드로 캐스팅을 하면 되었지만,
var newRequest = request.mutableCopy() as NSMutableURLRequest
Swift 1.2 부터는 아래와 같이 as!
를 사용해서 다운캐스팅을 해야 한다.
var newRequest = request.mutableCopy() as! NSMutableURLRequest
3. init() 를 재정의 하지 말고, super.init() 호출도 하지 않도록 디자인 변경
객체지향 프로그래밍을 하다보면 으레 형식적으로 기본 생성자를 만들기 마련이다. (대체적으로 컴파일러가 알아서 해 주는 경우가 많다)
다음과 같이 더 이상 super.init()
으로 초기화 하면 오류가 발생한다.
override init() {
super.init()
}
Swift 1.2 부터는 super
클래스에서 무조건 초기화가 되도록 변경되어 초기화 코드를 넣지 말아야 한다.
init() {
// super.init() <-- 절대 기본 생성자에서 이 코드를 쓰지 말자.
}
또, Swift 1.2 부터 기본 생성자는 재정의 하지 않도록 한다.
override init() { // <--- init() 을 재정의 하지 말자.
}
이전에 init()
생성자에서 초기화 코드를 넣거나 로직을 넣은 경우 골치가 아파진다. 따라서, 이 안에 있던 코드는 다른 곳으로 빼거나 override func init()
선언을 init()
으로 변경하여 재정의나 오버라이드 되지 않게 해야 한다.
4. Optional Type 은 반드시 명시적으로 사용하도록 변경
이전에는 Optional Type 을 사용할 경우 일부분 컴파일러가 알아서 처리(?)를 해 주었기 때문에 !
또는 ?
을 사용하지 않아도 되었지만, 이런 경우 런타임에 오류가 발생하는 경우가 생길 수 있다.
Swift 1.2 부터는 Optional Type 은 명시적으로 !
또는 ?
을 사용해야 한다.
class POWERUMC {
init?() {
}
}
class SomeClass {
func makeString() -> POWERUMC {
return POWERUMC()! // <-- ! 또는 ? 를 붙여주자. 다른 방법으로는 반환 타입을 정확히 명시하면 됨.
}
}
5. 제거된 일부 프로퍼티
아래의 코드는 일부 사라진 속성을 다른 방법으로 코드를 수정하도록 권장하는 오류가 발생한다. 이 이외에도 친절하게 오류로 설명해 주니 크게 어렵지는 않을 것이다.
// 아래의 코드의 utf16count 속성은 없어졌다. (Deprecated 아님, 제거됨!)
request.URLString.utf16Count
// Swift 1.2 부터는 아래와 같이 사용하자.
count(request.URLString.utf16)
'C++' 카테고리의 다른 글
[MIPS] beq 를 안쓰고 bne 를 쓰는 이유는 무엇인가요? (0) | 2015.05.12 |
---|---|
[Redis] 새로 추가한 mysql 명령어로 db 연동 (0) | 2014.04.21 |
[OpenSSL] 디버깅을 통해 알아보는 Heartbleed 취약성 버그 (0) | 2014.04.17 |
[GDB] Hopper Disassembler 앱 (0) | 2014.02.12 |
[퀴즈] 프로그래머를 위한 문제 #4 - 또라이 같은 C 언어 코드를 설명하라 (0) | 2013.12.30 |
- Total
- Today
- Yesterday
- ***** MY SOCIAL *****
- [SOCIAL] 페이스북
- [SOCIAL] 팀 블로그 트위터
- .
- ***** MY OPEN SOURCE *****
- [GITHUB] POWERUMC
- .
- ***** MY PUBLISH *****
- [MSDN] e-Book 백서
- .
- ***** MY TOOLS *****
- [VSX] VSGesture for VS2005,200…
- [VSX] VSGesture for VS2010,201…
- [VSX] Comment Helper for VS200…
- [VSX] VSExplorer for VS2005,20…
- [VSX] VSCmd for VS2005,2008
- .
- ***** MY FAVORITES *****
- MSDN 포럼
- MSDN 라이브러리
- Mono Project
- STEN
- 일본 ATMARKIT
- C++ 빌더 포럼
- .
- TFS
- Team Foundation Server 2010
- MEF
- github
- monodevelop
- .NET Framework 4.0
- testing
- LINQ
- Windows 8
- POWERUMC
- umc
- .NET
- Visual Studio
- 땡초
- TFS 2010
- Silverlight
- ASP.NET
- 비주얼 스튜디오
- 엄준일
- 팀 파운데이션 서버
- c#
- mono
- Visual Studio 11
- test
- Visual Studio 2010
- 비주얼 스튜디오 2010
- ALM
- Managed Extensibility Framework
- Team Foundation Server
- Visual Studio 2008