Я следую этому руководству по созданию складного TableView:
https://thewikihow.com/video_Q8k9E1gQ_qg
Он загружает массив имен String в представление таблицы следующим образом:
struct ExpandableNames {
var isExpanded: Bool
let names: [String]
}
var twoDimensionalArray = [
ExpandableNames(isExpanded: true, names: ["Amy", "Bill", "Zack", "Steve", "Jack", "Jill", "Mary"]),
ExpandableNames(isExpanded: true, names: ["Carl", "Chris", "Christina", "Cameron"]),
ExpandableNames(isExpanded: true, names: ["David", "Dan"]),
ExpandableNames(isExpanded: true, names: ["Patrick", "Patty"]),
]
Вместо этого я хотел бы создать массив имен String из переменной «name» моей модели Codable User:
struct User: Codable {
//var id: Int
var user_id: Int
var name: String
static func endpointForUsers() -> String {
return "users.php"
}
}
Обновлено: Короче говоря... у меня есть [Пользователь], и мне нужна [Строка], состоящая из свойств имени из массива [Пользователь].
Не могли бы вы объяснить, как мне затем загрузить все имена из моего пользовательского кода в виде массива строк? (Как тот, что в уроке.)
Заранее спасибо!
Ну, думаю, тогда понятно! :) Да. Это именно то, чего я хочу.
Слышали ли вы о map? Что именно здесь сложного? — И почему важно, чтобы Пользователь был кодируемым?
Вероятно, в этом сценарии этого не происходит. Но я просто делаю все свои структурные массивы кодируемыми, потому что использую их в других местах приложения. Я не уверен, как бы я использовал карту в этом сценарии. Наверное, я просто слишком много об этом думаю, потому что я занимался этим весь день, и ничего не помогло. Если вы напишете это как ответ, и это сработает, я сразу же приму это.
«У меня есть [Пользователь], и мне нужна [Строка], состоящая из свойств имени из массива [Пользователь]» namesList = usersList.map(\.name)
Используйте map() или простой цикл for, если map слишком сложен для вас...



Если у вас есть массив объектов User и вы хотите преобразовать его в массив String из свойств имени каждого пользователя, вы можете использовать функцию map().
Предполагая, что у вас есть 2 массива объектов User:
struct User: Codable {
//var id: Int
var user_id: Int
var name: String
static func endpointForUsers() -> String {
return "users.php"
}
}
}
func userNames(_ users: [User]) -> [String] {
return users.map { $0.name }
}
let users1: [User] = // Fetch users from a JSON file, a network call, or whatever
let users2: [User] = // Fetch another array of users from somewhere.
// MARK: - new code here
var twoDimensionalArray = [
// Create an ExpandableNames with the users from users1
ExpandableNames(isExpanded: true, names: userNames(users1)),
// Create an ExpandableNames with the users from users2
ExpandableNames(isExpanded: true, names: userNames(users2)) ]
(Для ясности я написал свой ответ в виде функции, но, учитывая, что это одна строка кода, вероятно, чище и проще просто использовать встроенный оператор карты в ваш код.)
Извините, я уверен, что вы ответили на вопрос, но я совершенно запутался и просто не понимаю. Итак, что бы я поставил вместо «names:» в разделе: ExpandableNames (isExpanded: true, name: ???)
Пример кода в вашем вопросе создает 4 отдельные структуры ExpandableNames. Каждому из них понадобится массив User. Откуда возьмется этот массив структур User?
Ваш вопрос не очень ясен. Я отредактировал свой ответ, чтобы показать несколько более полный пример. (Я не собираюсь смотреть видео на YouTube, чтобы узнать контекст вашего вопроса. Извините.)
Не совсем понятно, о чем вы спрашиваете. У вас есть
[User]и вы хотите, чтобы[String]состоял только из свойствnameиз массива[User]?