我有一条条件性声明,声称“表达过于复杂,无法在合理的时间内解决。如果在我的条件语句中包含的语句多于5个,它将失败并显示该错误。看起来该语句并不是那么复杂,这似乎不应该在编译时发生。这是其他任何人都遇到的错误吗?除了拆分我的条件之外,还有其他解决方案吗?
else if( contains(JSONDict.keys.array, "id") && contains(JSONDict.keys.array, "part_number") && contains(JSONDict.keys.array, "sales_part_number") && contains(JSONDict.keys.array, "include_in_search") && contains(JSONDict.keys.array, "description") && contains(JSONDict.keys.array, "brand") && contains(JSONDict.keys.array, "product_group") && contains(JSONDict.keys.array, "product_design") && contains(JSONDict.keys.array, "material") && contains(JSONDict.keys.array, "line") && contains(JSONDict.keys.array, "unit_of_mass") && contains(JSONDict.keys.array, "coating") && contains(JSONDict.keys.array, "pcs_converstion") && contains(JSONDict.keys.array, "appRim") && contains(JSONDict.keys.array, "appSegment") && contains(JSONDict.keys.array, "series") && contains(JSONDict.keys.array, "product_application") ){ }
解决方案是使用多行语句将逻辑表达式存储到变量中:
else { var logicalExpression = contains(JSONDict.keys.array, "id") && contains(JSONDict.keys.array, "part_number") && contains(JSONDict.keys.array, "sales_part_number") && contains(JSONDict.keys.array, "include_in_search") logicalExpression = logicalExpression && contains(JSONDict.keys.array, "description") && contains(JSONDict.keys.array, "brand") && contains(JSONDict.keys.array, "product_group") && contains(JSONDict.keys.array, "product_design") // ... etc. if logicalExpression { } }
对于如此强大的语言有些奇怪……但这是一个(希望是暂时的)权衡。