Swift addObject

时间:2014-11-05 20:38:15

标签: arrays json swift

所以,我正在学习如何使用JSON从DB获取数据,然后将数据放在某个数组上。当我需要将对象citiesArray.addObject(City())(id,name,state,...)中的所有数据放入数组时,最后一行city会出现问题。 我一直在逐行看编译器,基本上一切都很好,除了最后,我的数组仍然是空的(它的值是nil)?

for (var i=0;i<jsonArray.count;i++){
    //Create city objec
    var cID: AnyObject? = jsonArray.objectAtIndex(i).objectForKey("id") as NSString
    var cName: AnyObject? = jsonArray.objectAtIndex(i).objectForKey("cityName") as NSString
    var cState: AnyObject? = jsonArray.objectAtIndex(i).objectForKey("cityState") as NSString
    var cPopulation: AnyObject? = jsonArray.objectAtIndex(i).objectForKey("cityPopulation") as NSString
    var cCountry: AnyObject? = jsonArray.objectAtIndex(i).objectForKey("country") as NSString

    //add city obj (i have City class) to city array
    var city = City()

    city.cityID = cID as NSString
    city.cityName = cName as NSString
    city.cityState = cState as NSString
    city.cityPopulation = cPopulation as NSString
    city.cityCountry = cCountry as NSString

    citiesArray.addObject(City())
}

2 个答案:

答案 0 :(得分:14)

有几个问题:

  1. 您建议您尝试使用以下代码行添加城市:

    citiesArray.addObject(City())
    

    City()构造将实例化一个新的空白City对象。因此,在最佳情况下,该行代码会向您的数组添加一个空白City对象,这不是您想要的。

    当您将city添加到citiesArray时,您应该只是:

    citiesArray.addObject(city)
    
  2. 你说你已经定义了citiesArray,所以:

    var citiesArray: NSMutableArray!
    

    您还需要为此变量实例化一个对象(即创建一个此变量现在指向的对象),例如:

    citiesArray = NSMutableArray()
    
  3. 您正在报告,在此循环结束时,citiesArraynil。真?!?但是,如果您尝试调用addObject方法且citiesArraynil,则可能会收到致命错误:“在展开”可选“值时意外地发现”无“。

    因此,如果citiesArraynil,则jsonArray也必须为空。或者由于某种原因你甚至没有进入这个循环。我建议(a)记录jsonArray; (b)在这个循环中记录或放置断点并确认你甚至像你认为的那样进入这里。

    此外,请检查此时间(即确保您的语句记录citiesArray实际发生 此例程填充后)。我知道这听起来很疯狂,但如果你是异步地从某些网络资源中检索数据,你可能会遇到一些与时间相关的问题。

  4. 由于您正在编写Swift代码,因此可以考虑使用Swift数组。例如,将数组变量定义为

    var citiesArray: [City]!
    

    用以下方式实例化:

    citiesArray = [City]()
    

    使用以下命令添加对象:

    citiesArray.append(city)
    

答案 1 :(得分:6)

我很确定你需要使用追加功能:

 citiesArray.append(city)

如果你想追加数组的开头

 citiesArray.insert(city, atIndex: 0)

而不是

citiesArray.addObject(City())

这里有一个小例子:语法现在可能不是100%不与xcode一起使用。

 var strA:String = "apple"
 var strB:String = "pineapple"

 var strArr = ["kiwi", "mango", "lime"]

 strArr.append(strA)
 println(strArr.count) //4 ["kiwi", "mango", "lime", "apple"]


 citiesArray.insert(strB, atIndex: 0)
 println(strArr.count) //5 ["pineapple", "kiwi", "mango", "lime", "apple"]