Swift addObject

Jac*_*201 11 arrays json swift

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

Rob*_*Rob 14

几个问题:

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

    citiesArray.addObject(City())
    
    Run Code Online (Sandbox Code Playgroud)

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

    当你添加city到你的citiesArray,你应该简单地:

    citiesArray.addObject(city)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 你说你已经定义了你的citiesArray喜欢:

    var citiesArray: NSMutableArray!
    
    Run Code Online (Sandbox Code Playgroud)

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

    citiesArray = NSMutableArray()
    
    Run Code Online (Sandbox Code Playgroud)
  3. 要报告,不过,在这个循环结束,那citiesArraynil.真?!?但是,如果你试着拨打addObject方法citiesArraynil,你可以收到一个致命的错误:"意外发现零而展开的可选值".

    所以,如果citiesArraynil,那么jsonArray一定也是空的.或者由于某种原因你甚至没有进入这个循环.我建议(a)伐木jsonArray; 并且(b)在这个循环中记录或放置断点并确认你甚至像你认为的那样进入这里.

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

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

    var citiesArray: [City]!
    
    Run Code Online (Sandbox Code Playgroud)

    并实例化它:

    citiesArray = [City]()
    
    Run Code Online (Sandbox Code Playgroud)

    并使用以下方法添加对象:

    citiesArray.append(city)
    
    Run Code Online (Sandbox Code Playgroud)

  • 关于"Swift数组"的好方法.谢谢! (2认同)

the*_*der 6

我很确定你需要使用append函数:

 citiesArray.append(city)
Run Code Online (Sandbox Code Playgroud)

要么

如果你想追加数组的开头

 citiesArray.insert(city, atIndex: 0)
Run Code Online (Sandbox Code Playgroud)

代替

citiesArray.addObject(City())
Run Code Online (Sandbox Code Playgroud)

这里有一个小例子:语法可能不是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"]
Run Code Online (Sandbox Code Playgroud)