表达式对于编译器来说过于复杂:具有14个属性的数组

时间:2017-01-25 09:59:05

标签: arrays swift

我创建了一个包含14个属性的数组,然后错误'表达式太复杂合理的时间,考虑将表达式分解为不同的子表达式'提示。

我想通过使用SwiftyJSON从服务器中提取数据,并使用以下值传递到域:

let playerValue = ["_id" : player["_id"].intValue,
                     "title" : player["title"].stringValue,
                     "type" : player["type"].stringValue,
                     "version" : player["version"].intValue,
                     "coverSlot" : player["cover_slot"].stringValue,
                     "desc" : player["description"].stringValue,
                     "status" : player["status"].stringValue,
                     "level": player["level"].stringValue,
                     "pgCnt" : player["pg_cnt"].intValue,
                     "price" : player["price"].floatValue,
                     "cname" : player["cname"].stringValue,
                     "collection": player["collection"].stringValue,
                     "tree" : player["tree"].stringValue,
                     "guild" : player["guild"].stringValue,
        ] as [String : Any]

但是当我删除它的一行时,编译器不会抱怨它。

我可能需要添加3行数据,以便摆脱错误?

2 个答案:

答案 0 :(得分:0)

回答BjørnRuthberg(请查看问题的评论部分)。

解决方案是

let id = player["_id"].intValue
let title = player["title"].stringValue

let playerValue = [  "_id" : id,
                     "title" : title
                     ...
                  ] as [String : Any]

答案 1 :(得分:-1)

这实际上不是一个答案,但你可以通过创建一个生成你的数组的函数来避免创建一个巨大的一次性数组。不是吗?

func generateArray(with json: JSON) -> [String: Any] {
  var array = [String: Any]()
    for (key, subjson) : (String, JSON) in json {
      if let floatValue = subjson.float {
        if floatValue == Float(subjson.intValue) {
          array[key] = subjson.intValue
        } else {
          array[key] = floatValue
        }
      } else if let stringValue = subjson.string {
        array[key] = stringValue
      }
    }
    return array
  }

使用

获取数组
  let playerValue = generateArray(with: son)//player in your context
相关问题