【问题标题】:Mutiline String from array数组中的多行字符串
【发布时间】:2019-08-08 12:22:21
【问题描述】:

我必须创建一个用于创建账单的字符串格式。我有一个包含字典的数组。我尝试过但无法创建这样的字符串。 数组的结构是这样的。

[["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": ]]

使用这个数组,我必须像这样创建字符串。

提前致谢。

【问题讨论】:

  • 为什么不将此集合转换为对象数组?操作起来会更干净。完成后,通过 for 循环或 map 函数为您的数据和间距格式值追加一个新行,然后使用该字符串数组,您还可以通过传递 "\n" 新行作为分隔符来使用joined() 函数进行集合。
  • 您能否详细说明一下示例或网址,谢谢。
  • 您想要相同的对齐方式吗?因为它只有在以后用于打印的字体是等宽字体时才有效。你试过什么?
  • @Larme,感谢您的回复,我们需要通过 Star micronics 打印机打印客户订单。我从star micronics support 获得了一个演示,其中给出了这种类型的演示账单格式。所以,我们正在考虑用这种格式打印账单。
  • 第一步,您需要摆脱字典数组并创建一个表示每个行项目的结构。这将大大简化您的代码。

标签: ios swift3


【解决方案1】:
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)

【讨论】:

    【解决方案2】:

    首先,确保您的 JSON 是 valid

    其次,您可以将 JSON 解码为字典数组:

    let order = try? JSONDecoder().decode([[String:Any]], from: #JSONString)
    

    【讨论】:

      【解决方案3】:

      你可以试试这个。

      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)")
      

      【讨论】:

      • 刚刚修复了您的数据结构。看:""producthalfqty": , "productonfourthqty": , "productthirdqty": ]" 你应该放一些值或者不要加这些键
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 2019-11-15
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-16
      相关资源
      最近更新 更多