Вывести данные из вложенной? структуры в UITableView
Никак не получается вывести в UILable/UITableView следующий кусок вложенной структуры. Мне нужно передать из одного контроллера в другой (UITableView). Единственный вариант, когда, что-то выводится в ячейке, если я передам так:
controller.countryInfo.append([String(country.currencies?.description ?? "")])
при это в ячейке выводится вот такое: ) Я понимаю, что это из-за .description, но это хоть что-то, что я смог вывести.
[App.Currency(code: "AFN", name: "Afghan afghani", symbol: "؋")]
А должно быть:
AFN, Afghan afghani, ؋
Подскажите, как правильно сделать? )
struct Element: Codable {
let currencies: [Currency]?
enum CodingKeys: String, CodingKey {
case currencies = "currencies"
}
}
struct Currency: Codable {
let code: String
let name: String
let symbol: String
enum CodingKeys: String, CodingKey {
case code = "code"
case name = "name"
case symbol = "symbol"
}
}
Ответы (1 шт):
Все очень просто, добавь в структуру метод или что-то другое, что будет возвращать нужную тебе информацию, например если нужна информация о одном элементе Currency:
struct Currency: Codable {
let code: String
let name: String
let symbol: String
enum CodingKeys: String, CodingKey {
case code = "code"
case name = "name"
case symbol = "symbol"
}
// Можно такое: переменная только с get методом
var decoratedDescription: String {
return code + ", " + name + ", " + symbol
}
// Или так: что бы менять разделитель
func decoratedDescription(_ separator: String = ", ") -> String {
return code + separator + name + separator + symbol
}
}
Ну и использовать соответственно:
currencies[indexOfElement].decoratedDescription
// output: "AFN, Afghan afghani, ؋"
// или
currencies[indexOfElement].decoratedDescription()
// output: "AFN, Afghan afghani, ؋"
Если нужно делать для всего массива, то так же есть много решений, например в структуру Element добавить методы для вывода:
struct Element: Codable {
let currencies: [Currency]?
var decoratedDescription: String {
var arrayOfStrings: [String] = []
currencies?.forEach { curr in
arrayOfStrings.append(curr.decoratedDescription)
}
return arrayOfStrings.joined(separator: ", ")
}
func decoratedDescription(_ separator: String = ", ") -> String {
var arrayOfStrings: [String] = []
currencies?.forEach { curr in
arrayOfStrings.append(curr.decoratedDescription(separator))
}
return arrayOfStrings.joined(separator: separator)
}
enum CodingKeys: String, CodingKey {
case currencies = "currencies"
}
}
Тогда используем так:
country.decoratedDescription
// output: "AFN, Afghan afghani, ؋, AFN2, Afghan afghani2, ؋"
// или
country.decoratedDescription()
// output: "AFN, Afghan afghani, ؋, AFN2, Afghan afghani2, ؋"
Так же все зависит еще от ситуации, как и что и куда ты хочешь передать. Попробуй описать более детальней что и куда передается? В каком формате? Что должно быть? Больше кода. Что ты ожидаешь в результате?