Быстрое преобразование кодируемой переменной в массив строк

Я следую этому руководству по созданию складного 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"
          
        }
    }

Обновлено: Короче говоря... у меня есть [Пользователь], и мне нужна [Строка], состоящая из свойств имени из массива [Пользователь].

Не могли бы вы объяснить, как мне затем загрузить все имена из моего пользовательского кода в виде массива строк? (Как тот, что в уроке.)

Заранее спасибо!

Не совсем понятно, о чем вы спрашиваете. У вас есть [User] и вы хотите, чтобы [String] состоял только из свойств name из массива [User]?

jnpdx 05.06.2024 18:55

Ну, думаю, тогда понятно! :) Да. Это именно то, чего я хочу.

mystic cola 05.06.2024 20:02

Слышали ли вы о map? Что именно здесь сложного? — И почему важно, чтобы Пользователь был кодируемым?

matt 05.06.2024 20:07

Вероятно, в этом сценарии этого не происходит. Но я просто делаю все свои структурные массивы кодируемыми, потому что использую их в других местах приложения. Я не уверен, как бы я использовал карту в этом сценарии. Наверное, я просто слишком много об этом думаю, потому что я занимался этим весь день, и ничего не помогло. Если вы напишете это как ответ, и это сработает, я сразу же приму это.

mystic cola 05.06.2024 20:13

«У меня есть [Пользователь], и мне нужна [Строка], состоящая из свойств имени из массива [Пользователь]» namesList = usersList.map(\.name)

matt 05.06.2024 20:20

Используйте map() или простой цикл for, если map слишком сложен для вас...

Larme 05.06.2024 22:10
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
6
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если у вас есть массив объектов 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: ???)

mystic cola 05.06.2024 21:10

Пример кода в вашем вопросе создает 4 отдельные структуры ExpandableNames. Каждому из них понадобится массив User. Откуда возьмется этот массив структур User?

Duncan C 05.06.2024 21:41

Ваш вопрос не очень ясен. Я отредактировал свой ответ, чтобы показать несколько более полный пример. (Я не собираюсь смотреть видео на YouTube, чтобы узнать контекст вашего вопроса. Извините.)

Duncan C 05.06.2024 21:47

Другие вопросы по теме