Ios 循环NSArray并将对象添加到NSMutableArray

Ios 循环NSArray并将对象添加到NSMutableArray,ios,swift,loops,Ios,Swift,Loops,我一直在努力循环NSArray解析它,然后将它添加到NSMutableArray。问题不在于解析,我想在整个NSArray上循环 这是我的密码: if let dictionarys : NSArray = dictionary.valueForKey("response") as? NSArray { var categoryNum = 0 var currency = "0" if let category: NS

我一直在努力循环NSArray解析它,然后将它添加到NSMutableArray。问题不在于解析,我想在整个NSArray上循环

这是我的密码:

 if let dictionarys : NSArray = dictionary.valueForKey("response") as? NSArray {

            var categoryNum = 0
            var currency = "0"

            if let category: NSArray = dictionarys.valueForKey("category") as? NSArray {
                if let catId = category.valueForKey("categoryID") as? NSArray {
                   categoryNum = catId[0] as! Int
                }
            }
            if let currency1: NSArray = dictionarys.valueForKey("currency") as? NSArray {
                if let currency2 = currency1[0] as? String {
                    currency = currency2
                }
            }

serviceObject = ServicesObject(categoryId: categoryNum,currency: currency)
CategoryItems.addObject(serviceObject)


}
self.tableView.reloadData()
我想这样做:

            for (var i = 0;i<dictionarys.count ; i++){

     var categoryNum = 0
                var currency = "0"

                if let category: NSArray = dictionarys.valueForKey("category") as? NSArray {
                    if let catId = category.valueForKey("categoryID") as? NSArray {
                       categoryNum = catId[0] as! Int
                    }
                }
                if let currency1: NSArray = dictionarys.valueForKey("currency") as? NSArray {
                    if let currency2 = currency1[0] as? String {
                        currency = currency2
                    }
                }

    serviceObject = ServicesObject(categoryId: categoryNum,currency: currency)
    CategoryItems.addObject(serviceObject)

}

如果您尝试使用另一个数组初始化数组,请尝试以下操作

var nsmutablearrayVariableName = NSMutableArray.init(array: nsarrayVariableName)

如果您尝试使用另一个数组初始化数组,请尝试以下操作

var nsmutablearrayVariableName = NSMutableArray.init(array: nsarrayVariableName)

我已经获取了您的JSON示例,并制作了一个非常简单的示例,让您了解正确的Swift循环,这可能是您需要根据实际代码库和数据进行调整的地方

鉴于“词典”是NSA词典的一个集合:

for dict in dictionarys {
    if let curr = dict["currency"] as? Int {
        print("Currency: \(curr)")
    }
    if let category = dict["category"] as? NSDictionary {
        if let ID = category["categoryID"] as? Int {
            print("ID: \(ID)")
        }
    }
}

我已经获取了您的JSON示例,并制作了一个非常简单的示例,让您了解正确的Swift循环,这可能是您需要根据实际代码库和数据进行调整的地方

鉴于“词典”是NSA词典的一个集合:

for dict in dictionarys {
    if let curr = dict["currency"] as? Int {
        print("Currency: \(curr)")
    }
    if let category = dict["category"] as? NSDictionary {
        if let ID = category["categoryID"] as? Int {
            print("ID: \(ID)")
        }
    }
}

我将您的示例简化了一点,并添加了一些模拟类,以便在一个简单的操场上实现这一切:

import Foundation

class ServicesObject {
  var categoryId: Int
  var currency: String
  init(categoryId: Int, currency: String) {
    self.categoryId = categoryId
    self.currency = currency
  }
}

class CategoryItems {
  static func addObject(item: ServicesObject) {
    print("Added categoryID \(item.categoryId), currency \(item.currency)")
  }
}

let dictionary: NSArray = [
  ["response":
    ["category":
      ["category":"<null>",
        "categoryID":66],
     "currency": "2"]],
  ["response":
    ["category":
      ["category":"<null>",
        "categoryID":67],
    "currency": "3"]],
  ["response":
    ["category":
      ["category":"<null>",
        "categoryID":68],
    "currency": "4"]]]

if let responses = dictionary.valueForKey("response") as? NSArray {
  for response in responses where response is NSDictionary { // loop over all responses
    var categoryNums = 0
    if let category = response["category"] as? NSDictionary {
        categoryNums = category["categoryID"] as? Int ?? 0
    }
    var currency = response["currency"] as? String ?? "0"
    let serviceObject = ServicesObject(categoryId: categoryNums, currency: currency)
    CategoryItems.addObject(serviceObject) // add all responses
  }
}
<代码>导入基础 类服务对象{ 变量类别ID:Int var货币:字符串 init(categoryId:Int,currency:String){ self.categoryId=categoryId self.currency=货币 } } 类别项{ 静态func addObject(项:ServicesObject){ 打印(“添加的类别ID\(item.categoryID)、货币\(item.currency)”) } } let字典:NSArray=[ [“答复”: [“类别”: [“类别”:“, “类别ID”:66], “货币”:“2”]], [“答复”: [“类别”: [“类别”:“, “类别ID”:67], “货币”:“3”]], [“答复”: [“类别”: [“类别”:“, “类别ID”:68], “货币”:“4”]] 如果让responses=dictionary.valueForKey(“response”)作为?安萨雷{ 对于响应中的响应,其中响应为NSDictionary{//在所有响应上循环 变量类别=0 如果让category=response[“category”]as?NSDictionary{ categoryNums=类别[“categoryID”]作为?整数??0 } var currency=响应[“currency”]为?字符串??“0” 让serviceObject=ServicesObject(categoryId:categoryNums,currency:currency) CategoryItems.addObject(serviceObject)//添加所有响应 } }
这里有一些更有趣的东西,比如,但希望它能作为一个例子。

我把你的例子做得更快了一些,并添加了一些模拟类,让它在一个简单的操场上发挥作用:

import Foundation

class ServicesObject {
  var categoryId: Int
  var currency: String
  init(categoryId: Int, currency: String) {
    self.categoryId = categoryId
    self.currency = currency
  }
}

class CategoryItems {
  static func addObject(item: ServicesObject) {
    print("Added categoryID \(item.categoryId), currency \(item.currency)")
  }
}

let dictionary: NSArray = [
  ["response":
    ["category":
      ["category":"<null>",
        "categoryID":66],
     "currency": "2"]],
  ["response":
    ["category":
      ["category":"<null>",
        "categoryID":67],
    "currency": "3"]],
  ["response":
    ["category":
      ["category":"<null>",
        "categoryID":68],
    "currency": "4"]]]

if let responses = dictionary.valueForKey("response") as? NSArray {
  for response in responses where response is NSDictionary { // loop over all responses
    var categoryNums = 0
    if let category = response["category"] as? NSDictionary {
        categoryNums = category["categoryID"] as? Int ?? 0
    }
    var currency = response["currency"] as? String ?? "0"
    let serviceObject = ServicesObject(categoryId: categoryNums, currency: currency)
    CategoryItems.addObject(serviceObject) // add all responses
  }
}
<代码>导入基础 类服务对象{ 变量类别ID:Int var货币:字符串 init(categoryId:Int,currency:String){ self.categoryId=categoryId self.currency=货币 } } 类别项{ 静态func addObject(项:ServicesObject){ 打印(“添加的类别ID\(item.categoryID)、货币\(item.currency)”) } } let字典:NSArray=[ [“答复”: [“类别”: [“类别”:“, “类别ID”:66], “货币”:“2”]], [“答复”: [“类别”: [“类别”:“, “类别ID”:67], “货币”:“3”]], [“答复”: [“类别”: [“类别”:“, “类别ID”:68], “货币”:“4”]] 如果让responses=dictionary.valueForKey(“response”)作为?安萨雷{ 对于响应中的响应,其中响应为NSDictionary{//在所有响应上循环 变量类别=0 如果让category=response[“category”]as?NSDictionary{ categoryNums=类别[“categoryID”]作为?整数??0 } var currency=响应[“currency”]为?字符串??“0” 让serviceObject=ServicesObject(categoryId:categoryNums,currency:currency) CategoryItems.addObject(serviceObject)//添加所有响应 } }
这里有一些更有趣的东西,比如,但希望它能作为一个例子。

您说
字典:NSArray
,您可能想要一本字典。您是否在寻找
foreach
?我得到的响应是NSArray,因为我使用单例类进行http调用,方法调用参数是nsdictionary,因此当我作为NSArray获得响应时,我将其放在nsdictionary中,只是为了将其发送给控制器委托。然后在那里解析它。所以它是一个NSArray,它只是一个名称。
for(vari=0;iLook在,
for数组{print(item)}中的项
您声明
dictionarys:NSArray
,您可能需要一个字典。您是否在寻找
foreach
?响应作为NSArray获取,并且由于我使用singleton类进行http调用,因此方法调用参数是nsdictionary,因此当我作为NSArray获取响应时,我将其放置在nsdictionary中,仅将其发送给r控制器委托。然后在那里解析它。所以它是一个NSArray,它只是一个名称。
for(var i=0;在,
for数组中的项{print(item)}
我没有要求初始化另一个数组,我想在NSArray值中循环,每次将对象添加到另一个NSMutableArray中。因此,这不是一个答案。此方法正是这样做的,通过初始化将每个值添加到另一个数组中。我没有要求初始化另一个数组,我想在NSArray值中循环,每次另一个NSMutableArray中的对象。因此这不是答案。此方法正是这样做的,通过初始化将每个值添加到另一个数组中。非常感谢,我将检查它!:)@Kenneth Bruno,以新的处理方式为我提供了新信息!感谢您的帮助:)非常感谢,我将检查它!:)@肯尼思·布鲁诺,给了我新的信息和新的处理方式!谢谢你的帮助:)