web-dev-qa-db-fra.com

Faire un dictionnaire dans Swift

J'ai un objet extrait de Parse et je veux sauvegarder ses colonnes dans un Dictionary ou autre chose (si c'est mieux).

Je veux un dictionnaire comme celui-ci: ["name" : "Mike", "lastname" : "vorisis", "id" : "advsas"] 

Voici le code que j'utilise pour prendre mes résultats:

func queryEvents() {
    let query = PFQuery(className: "eventController")
    query.limit = 1000
    query.includeKey("idEvent")
    query.includeKey("eventType")
    query.includeKey("idEvent.idMagazi")
    query.findObjectsInBackgroundWithBlock { (objects, error)-> Void in
        if let objects = objects  {
            for object in objects {
                var post = object["idEvent"] as? PFObject
                var post2 = post!["idMagazi"]
                print("retrieved related post: \(post2["name"]!)")
            }
        }
    }
}
13
mike vorisis

J'ai finalement découvert comment puis-je le faire.

J'utilise une structure avec ce que je veux comme ceci:

var userDictionary = [Int : Event]()
struct Event {
        var nameEvent: String
        var nameMagazi: String


    }

Et puis j'utilise ceci: 

  if let objects = objects  {
                for object in objects {

                    let post = object["idEvent"] as? PFObject
                    let post2 = post!["idMagazi"] as? PFObject

                    let nameEvent = post!["name"] as! String
                    let idEvent = post?.objectId
                    let nameMagazi = post2!["name"] as! String

                     self.events[self.i] = Event(nameEvent: nameEvent , nameMagazi: nameMagazi)

                    self.i += 1
                }
                print(self.events[1]!.nameEvent)
            }

Merci à tous pour vos réponses!

5
mike vorisis

Quelque chose d'autre (si c'est meilleur) est une classe personnalisée. Changez le type de idMagazi en type réel.

class Event {

  let post : PFObject
  let name : String
  let idMagazi : String

  init(object : PFObject) {
    self.post = object
    self.name = object["name"] as! String
    self.idMagazi = object["idMagazi"] as! String

  }
}

Et l'utiliser 

 ...
 if let objects = objects as? [PFObject]  {
    var events = [Event]()
    for object in objects {

      let post = Event(object: object)
      events.append(post)
      print("retrieved related post: \(post.name)")
    }
 }
 ...
5
vadian

Dans Swift, Dictionary<T,V> équivaut à [T: V]. Le type est inféré s'il n'est pas déclaré explicitement.

Création de dictionnaire vide (tous équivalents):

var dict1: Dictionary<String, String> = [:]
var dict2: [String: String] = [:]
var dict3 = Dictionary<String, String>()
var dict4 = [String: String]()

Dictionnaire avec des valeurs (toutes équivalentes):

var dict5 = ["Foo": "Bar", "Foo1": "Bar1", "Foo2": "Bar2"]
var dict6: Dictionary<String, String> = ["Foo": "Bar", "Foo1": "Bar1", "Foo2": "Bar2"]
var dict7: [String: String] = ["Foo": "Bar", "Foo1": "Bar1", "Foo2": "Bar2"]

Ajouter des valeurs à un dictionnaire existant:

dict["Foo"] = "Bar"

Dans votre scénario spécifique, vous pouvez utiliser ceci:

let dict = ["name" : name, "lastname" : lastname , "id" : id]

name, lastname et id sont des variables String.


Mise à jour basée sur votre propre réponse :

Ayant cette structure:

struct Event {
    var nameEvent: String
    var nameMagazi: String
}

Vous pouvez utiliser cette approche, qui évite d'avoir un index externe et utilise un tableau au lieu d'un dictionnaire pour stocker les résultats.

var events: [Event]?

guard let objects = objects else { return }
events = objects.map { object in
    let post = object["idEvent"] as? PFObject
    let post2 = post!["idMagazi"] as? PFObject

    let nameEvent = post!["name"] as! String
    let idEvent = post?.objectId
    let nameMagazi = post2!["name"] as! String

    return Event(nameEvent: nameEvent , nameMagazi: nameMagazi)
}
3
redent84

Créez un dictionnaire comme ceci:

var dict = ["name" : "Mike", "lastname" : "vorisis" , "id" : "advsas"]

OR

var dict = Dictionary<String,String>
dict.setValue("Mike", forKey: "name")
2
iAnurag

Un dictionnaire peut être créé en utilisant cette ligne:

var dictionaryArray: [Dictionary<String,String,Int>] = []

Vous pouvez ensuite ajouter des valeurs en les ajoutant au dictionnaire. 

dictionaryArray.append(["name" : "Mike", "lastname" : "vorisis" , "id" : "advsas"])

J'espère que cela t'aides. 

0
onemillion