2016-05-30 10 views
0

finden Ich habe [ANYOBJECT] ArrayWie wir ein Element von [ANYOBJECT] Typ Array in schnellen

var updatedPos = [AnyObject]() 

Ich bin Daten, dass nach meiner Anforderung wie Einstellung!

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) 

Jetzt in meinem Code habe ich einige Anforderung das Objekt aus diesem Array zu entfernen, wo idhier nach Anforderung angepasst zu werden, ist der Code, den ich

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

umzusetzen versuchen Hier print("Id=\(posItem)") geben Sie mir als Id={"id":"51","job":"Programmer"} Ausgabe, aber hier kann ich ID von diesem Objekt nicht zugreifen. hier print("secRId=\(pId)") gib mir nil jemand mir helfen, hier bitte, was ich hier, danke ich fehlende

+0

Warum speichern Sie die JSON-Zeichenfolge anstelle der Sammlungsart (Wörterbuch)? – vadian

+0

@vadian das ist meine Anforderung Ich brauche nur 'ID' von diesem Objekt –

+0

Die Frage ist, warum speichern Sie eine ** Zeichenfolge ** und nicht ein ** Wörterbuch **? – vadian

Antwort

0
  • Zunächst einmal verwenden nativen Swift Collection-Typen.
  • Zweite aller Arten so spezifisch wie möglich.

Zum Beispiel Ihrer [AnyObject] Array kann auch als ein Array von Worten [[String:AnyObject]]

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

Jetzt den Wörterbücher erstellen und fügen Sie sie in das Array (in Ihrem Beispiel das Wörterbuch tatsächlich deklariert wird [String:String] ist, aber ich halte die AnyObject Werte).

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

Wenn Sie ein Element von id verwenden, um die Filterfunktion

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

oder alternativ

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

Die JSON-Serialisierung ist nicht für den Code, den Sie zur Verfügung gestellt erforderlich entfernen.

PS: Schreiben Sie nie valueForKey: und setValue:forKey:, wenn Sie nicht genau wissen, was es tut.

+0

Es kann die beste Lösung sein Ich habe nicht versucht, dass ich es später versuchen werde, ich brauche nur einen einfachen Vorschlag, können wir einen Artikel von 'Id = {" id ":" 51 "," job ":" Programmierer " } '. Forgot else, warum ich dies in Json String umwandle. Ich werde dir wirklich sehr danken, wenn du mir eine Lösung mit meinem Code liefern kannst –

+0

Noch einmal, nach deinem Code 'jsonString' ist ein Literal ** String **, es gibt kein Item. Wenn Sie die JSON-Serialisierung nicht benötigen, bearbeiten Sie Ihre Frage und entfernen Sie den irrelevanten Code. – vadian

+0

aber wenn ich Daten an die API sende, dann brauche ich diese Daten in JSON-Objekt. Deshalb habe ich dieses Ding geschaffen. –

0

Nach ein paar Kleinigkeiten habe ich die sehr einfache und beste Lösung für meine Frage gefunden. Und ich möchte @vadian besonders danken. Weil er mir hier etwas Neues beibringt. Hey Vielen Dank @vadian

Schließlich ist die Antwort ich die id von Id={"id":"51","job":"Programmer"} verdeckte posItem in json Format für die Suche nach hatte diese Zeichenfolge

Und der Weg ist

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

Und das funktioniert perfekt für Was ich für das will