2016-05-30 1 views
0

У меня есть [AnyObject] массивКак мы можем найти элемент из [AnyObject] типа массива в быстрых

var updatedPos = [AnyObject]() 

Я устанавливаю данные в том, что в соответствии с моим требованием как!

let para:NSMutableDictionary = NSMutableDictionary() 
para.setValue(posId, forKey: "id") 
para.setValue(posName, forKey: "job") 
let jsonData = try! NSJSONSerialization.dataWithJSONObject(para, options: NSJSONWritingOptions()) 
let jsonString = NSString(data: jsonData, encoding: NSUTF8StringEncoding) as! String 
self.updatedPos.append(jsonString) 

Теперь в моем коде я есть требование, чтобы удалить объект из этого массива, где идентификатор получения согласованного в соответствии с требованием Вот код, который я пытаюсь реализовать

for var i = 0; i < updatedPos.count; i++ 
     { 
      let posItem = updatedPos[i] 
      print("Id=\(posItem)") 
      let pId = posItem["id"] as? String 
      print("secRId=\(pId)") 

      if removeId! == pId! 
      { 
       updatedPos.removeAtIndex(i) 
      } 
     } 

Здесь print("Id=\(posItem)") дайте мне результат Id={"id":"51","job":"Programmer"}, но здесь я не могу получить доступ id с этого объекта. здесь print("secRId=\(pId)") дают мне ноль может понравиться любой один помочь мне здесь, что я здесь отсутствует, Спасибо

+0

Почему вы сохраняете строку JSON, а не тип коллекции (словарь)? – vadian

+0

@vadian, это мое требование, мне просто нужно 'id' от этого объекта –

+0

Вопрос в том, почему вы сохраняете ** строку **, а не ** словарь **? – vadian

ответ

0
  • Прежде всего использовать нативные Swift типы коллекций.
  • Во-вторых, используйте как можно более конкретные типы использования.

Например ваш [AnyObject] массив может быть также объявлен как массив словарей [[String:AnyObject]]

var updatedPos = [[String:AnyObject]]() 

Теперь создавать словари и добавить их в массив (в вашем примере словаря на самом деле [String:String], но я держу значения AnyObject).

let para1 : [String:AnyObject] = ["id" : "51", "job" : "Programmer"] 
let para2 : [String:AnyObject] = ["id" : "12", "job" : "Designer"] 
updatedPos.append(para1) 
updatedPos.append(para2) 

Если вы хотите удалить элемент с помощью id использовать функцию фильтра

let removeId = "12" 
updatedPos = updatedPos.filter { $0["id"] as? String != removeId } 

или альтернативно

if let indexToDelete = updatedPos.indexOf{ $0["id"] as? String == removeId} { 
    updatedPos.removeAtIndex(indexToDelete) 
} 

JSON сериализации не требуется для кода вы предоставили.

PS: Никогда не пишите valueForKey: и setValue:forKey:, если вы точно не знаете, что он делает.

+0

Это может быть лучшее решение, я не пробовал, что я попробую его позже, мне просто нужно простое предложение, можно ли получить элемент из 'Id = {" id ":" 51 "," job ":" Programmer " } '. Забыл еще, почему я конвертирую это в строку Json. Я действительно буду очень благодарен вам, если вы сможете предоставить мне решение с моим кодом. –

+0

Еще раз, в соответствии с вашим кодом 'jsonString' является литералом ** String **, нет элемента. Если вам не нужна сериализация JSON, отредактируйте свой вопрос и удалите ненужный код. – vadian

+0

, но когда я отправляю данные в API, мне нужны эти данные в JSON Object. Вот почему я создал эту вещь. –

0

После некоторых немного вещей я нашел очень легкое и лучшее решение для моего вопроса. И я хочу особо поблагодарить @vadian. Потому что он научил меня новой вещи здесь. Эй спасибо @vadian

Наконец ответ я имел тайную posItem в json Format для нахождения id из Id={"id":"51","job":"Programmer"} этой строки

И путь

let data = posItem.dataUsingEncoding(NSASCIIStringEncoding, allowLossyConversion: false) 
    do { 
     let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) 
     if let dict = json as? [String: AnyObject] { 
      let id = dict["id"] 
      if removeId! == id! as! String 
      { 
       updatedLoc.removeAtIndex(i) 
      }   
      } 
     } 
    catch { 
     print(error) 
    } 

И это работает идеально подходит для что я хочу для этого