Swift深度NSObjects不编译

时间:2016-04-12 19:58:50

标签: swift swift2 trie

在Swift中,我试图使用文字表示作为一系列嵌套的NSObject来实现一个单词Trie。这是特里。

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秒,然后出现以下错误:Error:(23, 26) expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions

为什么会发生这种情况,以及实现这一目标的最佳方式是什么,以免发生这种情况?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的错误。您可以将结构分解为自己的JSON文件并从那里读取,或者从较小的字典构建,然后将它们一起添加(按照建议打破表达式)。由于您的数据不固定,后者可能会更好。

答案 1 :(得分: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: [])