在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
为什么会发生这种情况,以及实现这一目标的最佳方式是什么,以免发生这种情况?
答案 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: [])