2016-04-12 17 views
0

Swift'de, bir dizi iç içe yerleştirilmiş NSObjects biçiminde bir temsili kullanarak bir Trie sözcüğünü uygulamaya çalışıyorum. İşte Trie. Error:(23, 26) expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressionsHızlı derin NSObject'ler derlenmiyor

Bunun nedeni nedir ve en iyi nedir: Ben komut satırı app geri kalanı ile bu derleme yaparken

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}"]]]]] 

Ancak, yaklaşık 26 saniye sürer, sonra aşağıdaki hata çıkageldi Bunu uygulama yolu bu şekilde olmaz mı?

+0

nasıl Swift JSON kullanılır? –

+0

Bu, karmaşık ifadeleri işlemek için yeterince hızlı/verimli olmayan Swift derleyicisinin bir sınırlamasıdır. Kodunuzu, birleştirdiğiniz küçük sözlüklere ayırmayı denemelisiniz. – jtbandes

cevap

1

Bu, Swift derleyicisinin bu ifadenin gerçek türünü bulması ve bunu anlamak uzun sürebilir.

JSON formatında bir dosya halinde veri taşımak olmalıdır:

{ 
    "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}"}}}}} 

Ardından çalışma zamanında yüklemek:

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

sweet, benim için JSON dosyasını maksimize ettiğiniz için teşekkürler :) –

1

Aynı hatayla karşılaşıyorum. Yapıyı kendi JSON dosyasına ayırabilir ve oradan okuyabilir ya da daha sonra eklediğiniz daha küçük sözlüklerden oluşturabilirsiniz (ifadeyi, önerildiği gibi). Verileriniz sabit olmadığından, ikincisi daha iyi.