Опираясь на ответ Дженни, вы можете привести свою структуру в соответствие с протоколом CustomStringConvertible
и добавить вычисляемое свойство для description
:
struct CartFood: CustomStringConvertible {
var id: Int
var price: Int
var quantity: Int
var description: String {
return """
[
"id": \(id),
"price": \(price),
"quantity": \(quantity)
]
"""
}
}
let products = [
CartFood(id: 23, price: 150, quantity: 10),
CartFood(id: 23, price: 150, quantity: 10)
]
print("[\n",products.map {$0.description}.joined(separator: ",\n"), "\n]")
Это выводит:
[
[
"id": 23,
"price": 150,
"quantity": 10
],
[
"id": 23,
"price": 150,
"quantity": 10
]
]
EDIT:
Кроме того, вы можете привести свою структуру в соответствие с протоколом Codable
:
struct CartFood: Codable {
var id: Int
var price: Int
var quantity: Int
}
Это означает, что его можно легко преобразовать в / из JSON.
Затем вы можете создать простое расширение протокола Encodable, которое позволяет отображать любой объект Encodable в виде «симпатичной» строки JSON:
extension Encodable {
var prettyJSON: String {
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
guard let data = try? encoder.encode(self),
let output = String(data: data, encoding: .utf8)
else { return "Error converting \(self) to JSON string" }
return output
}
}
И отобразите ваш массив структур следующим образом:
let products = [
CartFood(id: 23, price: 150, quantity: 10),
CartFood(id: 23, price: 150, quantity: 10)
]
print("products.prettyJSON =", products.prettyJSON)
что выводит:
products.prettyJSON = [
{
"id" : 23,
"price" : 150,
"quantity" : 10
},
{
"id" : 23,
"price" : 150,
"quantity" : 10
}
]
При этом используется синтаксис JSON, а не синтаксис, который Apple использует для отображения массивов и словарей, но концепция та же ...