2016-09-28 10 views
6

私はSwift 2.3プロジェクトをswift 3に変換しました。コンパイラはもうエラーは発生しませんが、コンパイルは継続します。 CPUは100%のようなもので、停止しなければ50分以上コンパイルしています。XcodeはSwift 3を構築し続けています

XcodeはBuilding ..と言っています。 Swiftソースファイルのコンパイル

ビルドログでは、常に同じ高速ファイルで停止します。スウィフトファイルは単純なモデルクラスなので、問題の内容を知ることはできません。

私は迅速2で同じ問題を抱えていたが、それは??オペレータによって引き起こされました。 ??演算子を削除するようにコードをリファクタリングしましたので、これはもうできません。

どのようにして無限にコンパイル時間を遅くすることがわかりますか?

私のモデルはすべて同じに見える:

protocol InputDictionaryMapper { 
    func retrieveInputDictionary() -> NSDictionary 
    func retrievePublicInputDictionary() -> NSDictionary 
} 

class InputContract: Model, InputDictionaryMapper { 

    func retrieveInputDictionary() -> NSDictionary { 
     fatalError("Each inputContract implementation must implement it's own method: \(NSStringFromClass(type(of: self)))") 
    } 

    func retrievePublicInputDictionary() -> NSDictionary { 
     fatalError("Each inputContract implementation must implement it's own method: \(NSStringFromClass(type(of: self)))") 
    } 

    required init(json: JSON) { 
     fatalError("init(json:) has not been implemented") 
    } 

    override init() { 
     super.init() 
    } 
} 

そしてモデルがあまりにもJSONのための別のinitを持っているだけで、基本クラスである:

class Test: InputContract { 
    var appointmentDate: Date! 
    var startTime: String! 
    var endTime: String! 
    var registerDescription: String! 
    var subjectKey: String! 
    var channelCode: String! 
    var relationManagerHrId: String = "" 
    var employeeUserCode: String = "" 
    var smsReminderMobileNumber: String = "" 
    var smsReminderMobileNumberSequence: String! 
    var contactPhoneNumber: String = "" 
    var contactPhoneNumberSequence: String! 
    var smsReminder: Bool = false 

override func retrieveInputDictionary() -> NSDictionary { 
     return ["description" : self.registerDescription, "appointmentDate" : Utils.formattedDate(self.appointmentDate), 
       "startTime" : self.startTime, "endTime" : self.endTime, "subjectKey" : self.subjectKey, "channelCode" : self.channelCode, "smsReminder" : self.smsReminder ? "true" : "false", "relationManagerHrId" : self.relationManagerHrId, "employeeUserCode" : self.employeeUserCode, 
       "smsReminderMobileNumber" : self.smsReminderMobileNumber, "contactPhoneNumber" : self.contactPhoneNumber, "smsReminderMobileNumberSequence" : self.smsReminderMobileNumberSequence, "contactPhoneNumberSequence" : self.contactPhoneNumberSequence 
     ] 
    } 
} 

InputContractです。

ビルドログでアナライザーを実行すると、すべてのモデルがNSDictionaryを作成するために長くかかります。しかし、なぜ?

+0

1.プロジェクトをクリーンアップしようとしましたか、Xcode/etcを再起動しましたか? 2.このSwiftファイルを別のプロジェクトでコンパイルしようとしましたか? もしそうでなければ、ハングするSwiftファイルの内容を投稿してください。 – fiks

+0

こんにちは、私は同じ問題を抱えています。解決策はありますか? – Rock

+0

@fiks私はクラスで私の質問を編集しました。 – user1007522

答えて

5

だから、問題は、我々はこのように作成した辞書をたくさん持っていたということでした:あなたは

var dict: [String: Any] = [String: Any]() 
dict["key"] = value 
dict["key2"] = value2 

としてこれを書き換える場合

let dict = ["key": value, "key2": value2] 

その後、コンパイラは魔法だけでモデルごとに15〜20ミリ秒を要しモデルごとに2000ミリ秒の代わりに。

あなた自身が迅速3にプロジェクトを移行した後、私は同じ問題に直面していた

+3

実際には、最初の辞書は実際には配列です:) 'let dict:[String:Any] = ...'を定義するだけでは不十分でしょうか。型推論は遅く、型が十分であると宣言することができます。 – Sulthan

+0

申し訳ありませんが、最初の配列は正しい配列です。私はコードを編集しました。はい、もちろん[String:Any]()の部分を削除することができます。それを明らかにするだけでした。 – user1007522

+1

'' dict:[String:Any] = ["key":value、 "key2":value2] 'を試してみるとどうなりますか? – Jesper

0

:-)ビルド時アナライザアプリでそれを試すことができますが、R & Dの多くの後、私は解決策を見つけました。辞書や配列がデータ型なしで作成されたため、時間がかかりました。

関連する問題