2017-07-27 4 views
0

Je suis nouveau à Swift et j'apprends comment utiliser parse.com pour stocker des données et le récupérer. Je télécharge un tableau de PFObjects de parse puis-je besoin de le transformer en une structure, donc je créé cette fonction:Impossible d'appeler la valeur du type non-fonction [PFObject] lors de la récupération d'informations à partir de parse.com

func queryDownload (user : PFUser) { 

    let objects: [PFObject] 
    let query = PFQuery(className: "Gluc") 
    query.whereKey("user", equalTo: user) 
    do { 
     objects = try query.findObjects() as [PFObject] 

    } catch { 
     print("ERROR") 

    } 
    let returnedObjects = objects { 
     let elements = self.returnedObjects.count 
     for i in 0...elements-1 { 
      self.dataArray.append(MyData(gluc: Int(self.returnedObjects[i]["meassure"] as! String)!, fec: self.returnedObjects[i]["fec"] as! Date, alimento: self.returnedObjects[i]["alim"] as! Int, comentarios: self.returnedObjects[i]["notes"] as! String)) 

     } 
    } 

    self.dataArrayOrdered = self.dataArray.sorted(by: { $0.fec.compare($1.fec) == .orderedAscending}) 

    print(self.dataArrayOrdered) 
} 

Mais je ne peux pas courir parce que dans cette ligne:

let returnedObjects = objects { 

Il sAIS « Impossible d'appeler la valeur de type non-fonction [PFObject] »

Je ne suis pas sûr de savoir comment éviter ce problème, de sorte que toute aide serait appréciée

Merci

Répondre

0
let returnedObjects = objects { ... } 

est une erreur de syntaxe, vous voulez probablement lier en option la valeur

if let returnedObjects = objects { ... } 

mais objects est non en option et la liaison est impossible.


suffit de lui assigner la valeur à la variable et enlever les accolades

do { 
    let objects = try query.findObjects() as [PFObject] 
    let returnedObjects = objects 
    let elements = self.returnedObjects.count 
    for i in 0...elements-1 { 
     self.dataArray.append(MyData(gluc: Int(self.returnedObjects[i]["meassure"] as! String)!, fec: self.returnedObjects[i]["fec"] as! Date, alimento: self.returnedObjects[i]["alim"] as! Int, comentarios: self.returnedObjects[i]["notes"] as! String)) 
    } 
    self.dataArrayOrdered = self.dataArray.sorted(by: { $0.fec.compare($1.fec) == .orderedAscending}) 
    print(self.dataArrayOrdered) 
} catch { 
    print("ERROR", error) 
} 

Il est très important de mettre tous les du bon code dans le bloc do et imprimer l'erreur réelle plutôt que le littéral simple chaîne "ERROR"

Cependant, ceci est rapide et il y a un moyen plus intelligent et plus pratique en utilisant le map fonction

do { 
    let objects = try query.findObjects() as [PFObject] 
    self.dataArray = objects.map { MyData(gluc: Int($0["meassure"] as! String)!, fec: $0["fec"] as! Date, alimento: $0["alim"] as! Int, comentarios: $0["notes"] as! String) } 
    self.dataArrayOrdered = self.dataArray.sorted(by: { $0.fec.compare($1.fec) == .orderedAscending}) 
    print(self.dataArrayOrdered) 
} catch { 
    print("ERROR", error) 
}