2016-10-04 2 views
1

코드를 Swift 3.0으로 변환하려고하는데 마이그레이션 도구를 사용한 후 특정 코드 블록을 변환하는 데 어려움이 있습니다.NSDate 코드가 Swift 3.0으로 마이그레이션되지 않았습니다.

는 SWIFT 3.0 마이그레이션 이전 :

import Foundation 

extension NSDate { 
    convenience init(posixTime: Double) { 
     self.init(timeIntervalSince1970: Double(posixTime)/1000.0) 
    } 
} 

마이그레이션 도구 후에 :

:

extension Date { 
    init(posixTime: Double) { 
     //ERROR IN THE LINE BELOW: "'init' is a member of the type; use 'type(of: ...)' to initialize a new object of the same dynamic type" 
     (self as NSDate).init(timeIntervalSince1970: Double(posixTime)/1000.0) 
    } 
} 

나는 "(: 초기화의) 유형"과 "초기화"를 대체 할 Xcodes 조언을 따라

extension Date { 
    init(posixTime: Double) { 
     //ERROR IN THE LINE BELOW: "Expected expression in list of expressions" 
     (self as NSDate).type(of: init)(timeIntervalSince1970: Double(posixTime)/1000.0) 
    } 
} 

Xcode는 "of :"앞에 쉼표를 추가하도록 요청합니다. 그러면 더 많은 오류가 발생할 수 있습니다 잘못된 장소에있는 mas). Swift 3에서이 코드 블록을 사용하는 올바른 방법은 무엇입니까?

답변

5

init 메서드에서 convenience을 쉽게 제거 할 수 있습니다.

extension Date { 
    init(posixTime: Double) { 
     self.init(timeIntervalSince1970: Double(posixTime)/1000.0) 
    } 
} 

잘못 이전 코드에있는 NSDate에 self 인스턴스를 변환 한 마이그레이션 도구처럼 보인다.

+0

그래,이게 해결책이야. –

+0

나는 마이그레이션이 편리함을 더하고 다음과 같은 유형을 추가 한 이상한 일들을 보았습니다. POS 소프트웨어 사과가 만든 것. –

+0

아쉽게도 자동 마이그레이션 도구는 여전히 수동 검사가 필요합니다. – ramacode

관련 문제