Je dois créer un format de chaîne pour créer des factures.i avoir un tableau contient des dictionnaires.Je essayé mais ne peut pas créer de chaîne comme celle-ci. La structure de la matrice est comme celle-ci.
[["orderid": 139, "productfullqty": 1, "productprice": 8.0, "productname": Falafel, "id": 544, "producthalfqty": , "productonfourthqty": , "productthirdqty": ], ["orderid": 139, "productfullqty": 12, "productprice": 5.4, "productname": Tomato, "id": 545, "producthalfqty": , "productonfourthqty": , "productthirdqty": ], ["orderid": 139, "productfullqty": 18, "productprice": 180.0, "productname": Green Sauce, "id": 546, "producthalfqty": , "productonfourthqty": , "productthirdqty": ], ["orderid": 139, "productfullqty": 1, "productprice": 0.46, "productname": Onions, "id": 547, "producthalfqty": , "productonfourthqty": , "productthirdqty": ], ["orderid": 139, "productfullqty": 1, "productprice": 8.0, "productname": Falafel, "id": 548, "producthalfqty": , "productonfourthqty": , "productthirdqty": ], ["orderid": 139, "productfullqty": 12, "productprice": 5.4, "productname": Tomato, "id": 549, "producthalfqty": , "productonfourthqty": , "productthirdqty": ], ["orderid": 139, "productfullqty": 18, "productprice": 180.0, "productname": Green Sauce, "id": 550, "producthalfqty": , "productonfourthqty": , "productthirdqty": ], ["orderid": 139, "productfullqty": 1, "productprice": 0.46, "productname": Onions, "id": 551, "producthalfqty": , "productonfourthqty": , "productthirdqty": ]]
3 Réponses :
struct MyOrder { let id: Int let orderId: Int let fullQuantity: Int let halfQuantity: Int let quarterQuantity: Int let price: Double let name: String init?(dict: [String:Any]) { guard let id = dict["id"] as? Int, let name = dict["productname"] as? String //.. //.. // so on else { return nil } self.id = id self.name = name } } let dataArray = [["id":0,"productname":"Oreo"]] let orders = dataArray.compactMap { MyOrder(dict: $0) } let myStringRows = orders.map{ "\($0.id)\t\t\($0.name)\t\t" } // format your data here. let myFinalTable = myStringRows.joined(separator: "\n") print(myFinalTable)
Tout d'abord, assurez-vous que votre JSON est Valide
second, vous pouvez décoder votre JSON en tant que tableau de Dictionnaire avec: p>
Vous pouvez essayer cela.
let Falafel = "Falafel" let Tomato = "Tomato" let GreenSauce = "Green Sauce" let Onions = "Onions" let orders = [["orderid": 139, "productfullqty": 1, "productprice": 8.0, "productname": Falafel, "id": 544, "producthalfqty": 1, "productonfourthqty": 1, "productthirdqty": 1], ["orderid": 139, "productfullqty": 12, "productprice": 5.4, "productname": Tomato, "id": 545, "producthalfqty": 1, "productonfourthqty": 1, "productthirdqty": 1], ["orderid": 139, "productfullqty": 18, "productprice": 180.0, "productname": GreenSauce, "id": 546, "producthalfqty": 1, "productonfourthqty": 1, "productthirdqty": 1], ["orderid": 139, "productfullqty": 1, "productprice": 0.46, "productname": Onions, "id": 547, "producthalfqty": 1, "productonfourthqty": 1, "productthirdqty": 1], ["orderid": 139, "productfullqty": 1, "productprice": 8.0, "productname": Falafel, "id": 548, "producthalfqty": 1, "productonfourthqty": 1, "productthirdqty":1 ], ["orderid": 139, "productfullqty": 12, "productprice": 5.4, "productname": Tomato, "id": 549, "producthalfqty": 1, "productonfourthqty": 1, "productthirdqty": 1], ["orderid": 139, "productfullqty": 18, "productprice": 180.0, "productname": GreenSauce, "id": 550, "producthalfqty": 1, "productonfourthqty": 1, "productthirdqty": 1], ["orderid": 139, "productfullqty": 1, "productprice": 0.46, "productname": Onions, "id": 551, "producthalfqty": 1, "productonfourthqty": 1, "productthirdqty": 1]] var result = "SKU Description Total\n" var subTotal: Decimal = 0 orders.forEach { (order) in if let sku = order["id"], let name = order["productname"], let value = order["productprice"], let price = value as? NSNumber { let SKU = "\(sku)".cString(using: .utf8)! let NAME = "\(name)".cString(using: .utf8)! let PRICE = String(format:"%0.2f", price.doubleValue).cString(using: .utf8)! let string = String(format: "%-15s%-32s%8s\n", OpaquePointer(SKU), OpaquePointer(NAME), OpaquePointer(PRICE)) result.append(string) subTotal += price.decimalValue } } result.append("Subtotal \(subTotal)\n") result.append("Tax \(0.00)\n") print("\(result)")
Il suffit de corriger votre structure de données. Regardez: "" producthalfqty ":," Produconfourthqty ":," productThirdqty ":]" Vous devez mettre des valeurs ou ne pas ajouter ces clés
Pourquoi ne pas convertir cette collection en une matrice d'objets? Il serait plus propre de fonctionner. Une fois que vous avez fait cela ajoute une nouvelle ligne avec votre valeur de format de données et d'espacement via une fonction de boucle ou de carte et plus tard avec ce réseau de chaîne, vous pouvez également utiliser une fonction jointe () pour les collections en passant une nouvelle ligne «\ N» en tant que séparateur.
Pouvez-vous s'il vous plaît élaborer avec l'exemple ou l'URL merci.
Voulez-vous avoir le même alignement? Parce que cela ne fonctionnera que si la police utilisée pour l'imprimer plus tard est monospace. Qu'avez-vous essayé?
@LeMe, merci pour la réponse, nous devons imprimer une facture de commande client via une imprimante Star Micronics. Et j'ai eu une démo du support Star Micronics, en ce type de format de facture de démonstration. Donc, nous envisageons ce format pour imprimer une facture.
La structure de données que vous avez fournie n'est pas valide Swift Syntaxe ou JSON. Plusieurs clés manquent leurs valeurs. Compte tenu de l'entrée, quelle sortie exacte voulez-vous? Pas "comme ça" mais la sortie réelle? Aucun des champs n'est étiqueté "SKU", "Description" ou "Total". Comment la ligne d'impôt est-elle censée être calculée? Quelle est la largeur de cette sortie? Que voulez-vous faire si la description est trop longue? Lorsque vous dites "tu as essayé", quel code avez-vous écrit et de quelle manière cela ne fonctionne-t-il pas?
En première étape, vous devez vous débarrasser de la gamme de dictionnaires et créer une structure qui représente chaque élément de ligne. Cela simplifiera considérablement votre code.