2017-08-15 1 views
0

コードに次の行を追加してからビルド(インデックス作成に5〜7分かかります)のパフォーマンスが非常に悪いです。パフォーマンス向上のためにこのステートメントを変換する方法

var valuesToPassToDetailViewController = [[String:[String: Any]]]() 
var dict = [String:[String: Any]]() 
dict = [title as! String:["title":title as! String, "valueD":postValue["value"] ?? "", "valueD":postValue["value"] ?? "","valueD":postValue["value"] ?? "","valueD": postValue["value"] ?? "","valueD": postValue["value"] ?? "","valueD":postValue["value"] ?? "","valueD":postValue["value"] ?? "" ,"valueD": postValue["value"] ?? "", "valueD": postValue["value"] ?? ""]] 
self.valuesToPassToDetailViewController.append(dict) 

もちろん、値Dは異なるキー値を持つキーであり、値は上記と同じ置換であることに注意してください。

私にこれを手伝ってください。すべてのお返事ありがとうございます。

+0

私は信じられないほど合理的な時間に解決するにはあまりにも複雑な表現であると信じていました。表現を別個のサブ表現に分割することを検討します。 – koropok

+0

そして、これはあなたが求めているものではないことは分かっていますが、これはこの非常に興味深いモデルを再訪する絶好の機会です。 – Rob

+0

デモのために同じ繰り返し値をコピーしただけではわからないが、現在のフォームでは、辞書には繰り返しキーがありませんので、このコードはコンパイルされません。 –

答えて

1

(悪いコードの練習とは別に)リテラルのネストが多いため、Swiftコンパイラが処理しにくいコードを記述します。 (コードの他の部分にも起こります。) 簡単な解決策:あなたはrepeatingly同じ値を使用していると

let nonNullValue = postValue["value"] ?? "" 

dict = [title as! String : ["title":title, 
          "valueD": nonNullValue, 
          "valueD": nonNullValue, 
          "valueD": nonNullValue, 
          "valueD": nonNullValue, 
          "valueD": nonNullValue, 
          "valueD": nonNullValue, 
          "valueD": nonNullValue , 
          "valueD": nonNullValue, 
          "valueD": nonNullValue]] 

は仕事を行います。

私は、いくつかのコーディングノートをさせて頂く場合:

  • は値を繰り返すためのVARを使用し、そうすることが、コンパイラを幸せにするだけでなく、それはFASTER一般的であるだけでなく、(あなたはABCDを使用する場合は特に()あなたのクラス/構造体を作成し、それらを渡すときに、コントロール間の一般的な構造を渡さないでください。

  • は、動的にdictに追加するほうが適しています。たとえばdisk/networkなどのデータを読み込む必要がある場合は、簡単になります。

希望します。

別の提案:このようにtypealiasへ

パス:

ので、あなたが書くことができます。

var valuesToPassToDetailViewController2 = Dict() 
を辞書ですが、= [:[文字列の任意]]、[文字列]

typealias

カウンタテスト:

var valuesToPassToDetailViewController = [[String:[String: Any]]]() 
    var valuesToPassToDetailViewController2 = Dict() 

    valuesToPassToDetailViewController2 = valuesToPassToDetailViewController 
+0

これもうまくいったけど、自分の目的のために構造を作ることにした。しかし、私はあなたの答えを複雑さのために解決策としてマークしています。 –

+0

よろしくお願いします。私は将来このアプローチを使用すると頭痛を覚えると思います。 – ingconti

関連する問題