Swift 深度 NSObjects 不编译

Swift deep NSObjects do not compile

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

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

为什么会发生这种情况,最好的实现方式是什么,这样就不会发生这种情况?

我 运行 遇到过同样的错误。您可以将结构分解成它自己的 JSON 文件并从那里读取,或者从较小的词典构建然后将它们添加在一起(按照建议分解表达式)。由于您的数据未修复,后者可能更好。

这是因为 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: [])