【问题标题】:Swift addObject快速添加对象
【发布时间】:2014-11-05 20:38:15
【问题描述】:

所以,我正在学习如何使用 JSON 从数据库中获取数据,然后将数据放在某个数组中。问题出现在最后一行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())
}

【问题讨论】:

  • 最后一行应该是citiesArray.addObject(city) ...
  • 我试过 City(), city, City, city.cityName, City().cityName。没有任何效果。
  • citiesArray 在哪里声明?它在哪里/如何初始化?
  • 它在哪里初始化
  • 该行没有初始化数组。那只是声明它。首先你必须像这样初始化它:citiesArray = NSMutableArray(),然后你可以按照@MartinR 发布的方式添加它。

标签: arrays json swift


【解决方案1】:

几个问题:

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

    citiesArray.addObject(City())
    

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

    当您将city 添加到您的citiesArray 时,您应该简单地:

    citiesArray.addObject(city)
    
  2. 你说你已经像这样定义了你的citiesArray

    var citiesArray: NSMutableArray!
    

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

    citiesArray = NSMutableArray()
    
  3. 不过,您报告的是,在此循环结束时,citiesArraynil。真的?!?但是如果您尝试调用addObject 方法并且citiesArraynil,您可能会收到一个致命错误:“unexpectedly found nil while unwrapping an Optional value”。

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

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

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

    var citiesArray: [City]!
    

    并用以下方式实例化它:

    citiesArray = [City]()
    

    并向其中添加对象:

    citiesArray.append(city)
    

【讨论】:

  • 谢谢!我忘记添加城市数组()进行实例化,并且我已经将“城市()”放在“城市”之外,所以这也是错误的。现在一切正常!
  • 关于“Swift 数组”的好方法。谢谢!
  • 好一个,我试图附加字符串数组而不是对象数组。你的回答有帮助!
【解决方案2】:

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

 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"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    相关资源
    最近更新 更多