2016-04-12 13 views
0

Swiftでは、一連のネストされたNSObjectとしてリテラル表現を使用して単語Trieを実装しようとしています。ここにトライです。 Error:(23, 26) expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressionsSwift deep NSObjectsはコンパイルされません

は、このエラーが発生する理由、そして最高のものです:私は、コマンドラインアプリケーションの残りの部分でこれをコンパイルするとき

let GEENITRIE:NSObject = [ 
    "i":[ 
      "need":[ 
        "tutoring":[ 
          "in":[ 
            "**ARG**":"{courserequest}"]], 
        "a":[ 
          "tutoring":[ 
            "session":[ 
              "in":[ 
                "**ARG**":"{courserequest}"]]]]], 
      "want":[ 
        "tutoring":[ 
          "in":[ 
            "**ARG**":"{courserequest}"]]], 
      "would":[ 
        "like":[ 
          "tutoring":[ 
            "in":[ 
              "**ARG**":"{courserequest}"]]]]], 
    "tutoring":[ 
      "in":[ 
        "**ARG**":"{coureserequest}", 
        "and":[ 
          "**ARG**":"{doublecourse}"]], 
      "at":[ 
        "**ARG**":"{timeparse}"]], 
    "a":[ 
      "tutoring":[ 
        "session":[ 
          "in":[ 
            "**ARG**":"{courserequest}"], 
          "at":[ 
            "**ARG**":"{timeparse}"]]]]] 

しかし、それは約26秒かかり、その後、次のエラーがアップしますこれを実装する方法はこれが起こりません?

+0

あなたが迅速でJSONを使うにはどうすればよいですか? –

+0

これは、Swiftコンパイラの単なる制限です。これは現在、複雑な式を処理するのに十分速く/効率的ではありません。あなたはあなたが一緒に結合する小さな辞書にあなたのコードを壊すしようとする必要があります。 – jtbandes

答えて

1

これはSwiftコンパイラがその式の実際の型を把握しなければならないために起こります。

あなたはJSON形式でファイルにデータを移動する必要があります。

{ 
    "i":{ 
     "need":{ 
       "tutoring":{ 
          "in":{ 
           "**ARG**":"{courserequest}"}}, 
       "a":{ 
        "tutoring":{ 
           "session":{ 
              "in":{ 
               "**ARG**":"{courserequest}"}}}}}, 
     "want":{ 
       "tutoring":{ 
          "in":{ 
           "**ARG**":"{courserequest}"}}}, 
     "would":{ 
       "like":{ 
         "tutoring":{ 
            "in":{ 
              "**ARG**":"{courserequest}"}}}}}, 
    "tutoring":{ 
       "in":{ 
        "**ARG**":"{coureserequest}", 
        "and":{ 
          "**ARG**":"{doublecourse}"}}, 
       "at":{ 
        "**ARG**":"{timeparse}"}}, 
    "a":{ 
     "tutoring":{ 
        "session":{ 
           "in":{ 
            "**ARG**":"{courserequest}"}, 
           "at":{ 
            "**ARG**":"{timeparse}"}}}}} 

を次に、実行時にそれをロードします。

let jsonUrl = NSBundle.mainBundle().URLForResource("data", withExtension: "json")! 
let jsonData = NSData(contentsOfURL: jsonUrl)! 
let tree = try! NSJSONSerialization.JSONObjectWithData(jsonData, options: []) 
+0

甘い、私のためにJSONファイルを最大にしてくれてありがとう:) –

1

同じエラーが発生しました。構造体を独自のJSONファイルに分割して読み込み、そこから読み込んだり、小さな辞書から作成したりすることもできます。あなたのデータは固定されていないので、後者はおそらくより良いでしょう。

関連する問題