2016-01-28 2 views
0

Я так старался, чтобы цикл в NSArray разобрал его, а затем добавил в NSMutableArray. проблема не в синтаксическом разборе, я хотел бы перебрать весь NSArray.Петля в NSArray и добавить объект к NSMutableArray

Вот мой код:

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) 

} 

пример того, что я пытаюсь разобрать я сделал: print(dictionarys)

(
     { 
     category =   { 
      category = "<null>"; 
      categoryID = 66; 
     }; 
     currency = 2; 

    },{ 
     category =   { 
      category = "<null>"; 
      categoryID = 66; 
     }; 
     currency = 2; 

    },{ 
     category =   { 
      category = "<null>"; 
      categoryID = 66; 
     }; 
     currency = 2; 

    } 
) 
+0

Вы указали, что 'dictionarys: NSArray', вам может понадобиться словарь. – zcui93

+0

Вы ищете 'foreach'? – SmokeDispenser

+0

ответ я получаю его как NSArray и потому что я использую singleton класс для http-звонков, параметр вызова метода - nsdictionary, поэтому, когда я получаю ответ как NSArray, я помещаю его в NSDictionary только для отправки его для делегата контроллера. а затем разобрать его там. поэтому его NSArray, его просто имя. –

ответ

1

Я сделал свой пример немного более Swifty и добавлены некоторые издевались классы, чтобы получить все, чтобы работать в простом Playground:

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 
    } 
} 

Там есть какой-то причудливый материал, такой как nil coalescing operator (??), но, надеюсь, он будет работать в качестве примера.

0

Вы можете инициализировать массив другим массивом, если попытаетесь это сделать.

var nsmutablearrayVariableName = NSMutableArray.init(array: nsarrayVariableName) 
+0

Я не просил инициализировать другой массив, я хочу зациклиться на значениях NSArray и добавлять каждый раз объект в другой NSMutableArray. так что это не ответ. –

+0

этот метод делает именно это, добавляет каждое значение в другой массив с инициализацией. – turushan

1

Я взял ваш образец JSON и сделал это очень простой пример для вас, чтобы получить представление о правильном Swift цикла, это, вероятно, что вам нужно адаптировать для фактической базы коды и данных.

Учитывая, что «dictionarys» является NSArray из NSDictionaries:

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)") 
     } 
    } 
} 
+0

Большое спасибо, я проверю! :) –

+0

@NataMio Это сработало для вас? – Moritz

+0

@ Kenneth Bruno, дал мне новую информацию с новым способом обработки! Спасибо за помощь :) –