2016-10-04 6 views
1

コードをSwift 3.0に変換しようとしていますが、移行ツールを使用した後に特定のコードブロックを変換するのが難しいです。NSDateコードがSwift 3.0に移行していません

SWIFT 3.0への移行PREVIOUS

:私は "(:INITの)タイプ" と "初期化" を交換するXcodesのアドバイスに従っ

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) 
    } 
} 

:移行ツールAFTER

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: "Expected expression in list of expressions" 
     (self as NSDate).type(of: init)(timeIntervalSince1970: Double(posixTime)/1000.0) 
    } 
} 

Xcodeは "of:"の前にカンマを追加するように要求します。これによりエラーが発生しやすくなります。間違った場所に居る)。 Swift 3でこのコードブロックを使用する正しい方法は何ですか?

答えて

5

initメソッドからconvenienceを簡単に削除できます。

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

移行ツールが誤ってあなたの前のコードでNSDateへselfインスタンスを変換しているように思えます。

+0

これは解決策でした。 –

+0

マイグレーションでは、マイグレーションが利便性を高め、次にタイプを追加した奇妙なことがありました。 POSソフトウェアappleが作ったもの –

+0

残念ながら、自動移行ツールでは依然として手動による検査が必要です。 – ramacode

関連する問題