2016-07-20 47 views
1

I API-Anfrage haben json string, so etwas zu bekommen:Swift Erweiterung - Parse Json zu NSDictionary Model (Kategorie Verwendung Wie in Obj-C)

{ 
    "data":[ 
    { 
    "id":123, 
    "name":"Felix"}, 
    { 
    "id":122, 
    "name":"Mary"}, 
    { 
    "id":111, 
    "name":"Jason"}, 
    ] 
} 

und in meinem Obj-C NSDictionary + -Benutzer

ist
-(NSString *)usrId 
{ 
    return self[@"id"]; 
} 

-(NSString *)usrName 
{ 
    return self[@"name"]; 
} 
... 

und wenn ich das benutze ich die Kategorie Klasse importieren und Zugriff auf sie wie dict.name ...

ich keine gute Antwort in Bezug auf diese Frage finden. Wie kann ich dies in Swift erreichen?


AKTUALISIERT [2017.07.21]

Ich habe wählte SwiftyJSON Bibliothek verwenden, um alle json-Wörterbuch-Objekt-Mapping Arbeiten zu begleichen. Sparen Sie viel Zeit.

SwiftyJSON

+0

Warum machen wir keine Modellklasse, statt die Dictionary-Kategorie zu verwenden? Wir können in der Init der Modellklasse analysieren und später können wir holen –

Antwort

0

beste und sicherste Weg, json Antwort zu analysieren, um NSDictionary und es in schnellen zu verwenden ist:

var responseRecord<datastruct> = Array<datastruct>()    

struct datastruct 
{ 
    var id: String? 
    var name:String? 

    init(add: NSDictionary) 
    { 
     id = add["id"] as? String 
     name = add["name"] as? String 
    } 
} 

Und es zuzugreifen in Programm:

print(self.responseRecord.id) print(self.responseRecord.name)

0

einfach Erstellen Sie eine leere Swift-Klasse mit den erforderlichen Eigenschaften (Swift 2.2): -

class myClass { 

var id:Int? 
var name:String? 

init(id:Int,name:String) 
{ 
self.id= id 
self.name = name 
} 
} 

Dann Zugang in erforderlich VC: -

var requiredData:[String]? 
    var data:[myClass]? 

    override fun viewDidLoad() 
    { 
    super.viewDidLoad() 
    requiredData = data!.enumerate().map({ (index, category) in 
       return ("\(category.name!)") 
       }) 

print(requiredData) 


    } 

Anmerkung: Ich gehe davon aus Sie bereits Daten in dem erwähnten "Daten" Variable von myClass Art bevölkert haben. Wenn nicht, dann können Sie dies folgendermaßen tun: -

data = [myClass(id:1,name:"aaa"),myClass(id:2,name:"bob"),myClass(id:3,name:"ccc")]