数组仅包含最后添加的值,但计数仍然相同

时间:2016-03-30 15:52:26

标签: arrays json swift

我正在解析JSON并将数据附加到数组,虽然数组包含正确数量的元素,但它只是一遍又一遍的相同元素,无论最后添加的是什么。这是我正在使用的代码:

if (statusCode == 200) {
    do{
      let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)
      if let ns = json as? NSArray{
        for ns in ns{
          if let name = ns["name"] as?  String{
            if let number = ns["number"] as? Int{
              if let cn = ns["cyclenumber"] as? Int{
                if let url = ns["url"] as? String{
                  self.c.name = name
                  self.c.number = number
                  self.c.cycleNumber = cn
                  self.c.url = url
                  self.n.array.append(self.c)
                }
              }
            }
          }
        }
      }

    }catch {
       print("Error with Json: \(error)")
   }

 }

当我打印数组时,它会打印但是添加了很多元素,但它们都是最后添加元素的副本。

2 个答案:

答案 0 :(得分:1)

问题在于你不断追加理智的实例 - 即$newFileName = '{0}-{1}{2}' -f ($rootName,$filecount.ToString("000"),$ext) $fullPath = Join-Path -Path (Split-Path $filename -Parent) -ChildPath $newFileName $writer = [IO.File]::CreateText($fullPath) 。由于self.c的类型是c,而不是class,因此不会进行复制;相同的引用一遍又一遍地添加到数组中。

您可以通过struct输入c或在循环的每次迭代中指定新的struct来解决此问题:

c

请注意,if let url = ns["url"] as? String { var c = TypeOfC() // Make a new instance c.name = name c.number = number c.cycleNumber = cn c.url = url self.n.array.append(c) } 不再是c的成员。由于你在循环中更改self,因此首先将其作为成员很可能是一个错误。

答案 1 :(得分:1)

已经给出了答案,但我认为我应该稍微清理一下你的代码:)

guard let data = data where statusCode == 200 else {
    return
}

do{
    let json = try NSJSONSerialization.JSONObjectWithData(data, options:.AllowFragments)

    if let ns = json as? NSArray{
        for ns in ns{
            if let name = ns["name"] as? String, number = ns["number"] as? Int,
                cn = ns["cyclenumber"] as? Int, url = ns["url"] as? String{

                    self.c.name = name
                    self.c.number = number
                    self.c.cycleNumber = cn
                    self.c.url = url
                    self.n.array.append(self.c)
                }
            }
        }

}catch {
    print("Error with Json: \(error)")
}