2016-11-02 12 views
8

mam struct następującoSwift 3: Jak przekonwertować struct do parametrów

struct UserInfo 
{ 
    var userId : Int 
    var firstName : String 
    var lastName : String 
} 

jaki sposób serializacji instancji UserInfo wpisać Parameters?

var user = UserInfo(userId: 1, firstName: "John", lastName: "Skew") 

// Convert user to Parameters for Alamofire 
Alamofire.request("https://httpbin.org/post", parameters: parameters) 

Odpowiedz

14

Wystarczy wdrożyć dictionaryRepresentation komputerowej zmiennej lub funkcji:

struct UserInfo { 
    var userId : Int 

    var firstName : String 
    var lastName : String 

    var dictionaryRepresentation: [String: Any] { 
     return [ 
      "userId" : userId, 
      "firstName" : firstName, 
      "lastName" : lastName 
     ] 
    } 
} 

Użycie:

var user = UserInfo(userId: 1, firstName: "John", lastName: "Skew") 
let userDict = user.dictionaryRepresentation 
2

Jeśli masz zamiar zrobić parametry mają być wysyłane jako żądanie POST to powinien wziąć słownika formatu następująco:

let userDict = ["userId" : user.userId, "firstname" : user.firstname, "lastname" : user.lastname] 

ten powinien działać jako „parametrów” dla swojej sieci

3

Nie można bezpośrednio przekazać struct jako parametru. Konwersja struktury na [String:Any]. Dodałem nową zmienną opis, który konwertuje zawartość do słownika

struct UserInfo 
{ 
    var userId : Int 
    var firstname : String 
    var lastname : String 


    var description:[String:Any] { 
     get { 
      return ["userId":userId, "firstname": self.firstname, "lastname": lastname] as [String : Any] 
     } 
    } 
} 

A użycie jest

var user = UserInfo(userId: 1, firstname: "John", lastname: "Skew") 

// Convert user to Parameters for Alamofire 
Alamofire.request("https://httpbin.org/post", parameters: user.description) 
+4

Jak to się różni od użytkownika @ alexburtnik odpowiedź? – WMios

+1

Wydaje się, że nie ma różnicy. Obaj użytkownicy próbowali opublikować podobną odpowiedź w tym samym czasie z różnych lokalizacji :-) – Anand

1

w Swift 4 można użyć dekodowalnej/do kodowania Struct

4

Można użyć CodableFirebase biblioteki . Chociaż jego głównym celem jest użycie go z Firebase Realtime Database i Firestore, to faktycznie robi to, czego potrzebujesz - konwertuje wartość na słownik [String: Any].

Twój model będzie wyglądał następujące:

struct UserInfo: Codable { 
    var userId : Int 
    var firstName : String 
    var lastName : String 
} 

A potem będzie przekonwertować go do słownika w następujący sposób:

import CodableFirebase 

let model: UserInfo // here you will create an instance of UserInfo 
let dict: [String: Any] = try! FirestoreEncoder().encode(model)