얼마 전 Swift 1.2 버전으로 업그레이드를 실시했다. 뭐, 자의에 의해서 한 것은 아니고, Xcode 6.3.1 버전으로 업데이트 하니 자연스럽게 Swift 언어 버전도 업데이트 된 것!

다음은 Swift 1.2 로 업데이트하면서 나에게 발생한 오류를 정리해 본다.


1. NSStringString 타입 캐스팅(형변환)은 명시적으로 하도록 변경

이렇게 동작하던 코드는 더 이상 암시적으로 캐스팅을 하면 안된다.

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인데 이를 NSMutableURLRequestas 키워드로 캐스팅을 하면 되었지만,

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)


Posted by 땡초 POWERUMC

댓글을 달아 주세요

[마감] 중간 번역 (Inter-Translate) 베타 버전 다운로드 공개

중간 번역(Inter-Translate) 앱이 탄생하게 된 계기는 다음과 같습니다.

구글에서 제공하는 번역기의 공개 API는 번역 문장의 길이에 제한이 있어 한글 문장 약 1,500자가 넘으면 번역이 되지 않고, 번역 횟수에도 제한이 있습니다. 이 두 가지의 문제를 해결하기 위해 우회적인 방법으로 제한 없이 매우 긴 문장도 번역할 수 있는 앱입니다.

사용자의 피드백을 받아 기능을 더 개선하기 위해 제 블로그에서 베타 빌드 버전을 공개합니다. iOS 버전도 곧 테스트를 위해 공유할 예정입니다.

익숙한 Objective-C 를 뒤로 하고, 공부도 해 볼겸 Swift with Objective-C 두 가지 언어로 개발이 되었습니다.

개선을 위한 피드백은 제 개인 이메일로 보내주시면 됩니다. powerumc at gmail.com

앱스토어 다운로드


(유튜브 Full 영상)




영문을 한글로 번역하는 것이 힘드시죠?
번역 품질을 더 매끄럽게 만들기 위해 중간 번역(Inter Translation) 앱을 이용해 보세요.

구글은 일본어에 대한 번역 데이터베이스가 더 풍부한 점을 이용하여, 번역할 문장을 일본어로 번역한 후 이를 다시 원하는 언어로 번역합니다.

일반적으로 한글을 직접 번역하는 것 보다 훨씬 품질이 좋습니다.

즉시 번역 예)
Hello -> 안녕하세요.

중간 번역 예)
Hello -> こんにちは -> 안녕하세요.

특징
1. 즉시 번역과 중간 번역을 선택적으로 사용
2. 입력 글자수에 제한이 없음
3. 즉시 번역과 중간 번역 차이점 비교 기능


스크린샷




Posted by 땡초 POWERUMC

댓글을 달아 주세요