Инициализация пользовательской структуры в Swift

#swift #struct #properties

#swift #структура #свойства

Вопрос:

 struct User {
    var userID: String
    var nameSurname: String
    var email: String
    var password: Int
    var profileImageUrl: String

    var userDictionary: [String: Any] {
        return [
            "userID": userID,
            "nameSurname": nameSurname,
            "email": email,
            "password": password,
            "profileImageUrl": profileImageUrl,

        ]
    }
}

extension User {

    init?(dictionary: [String: Any]) {
        guard let userID = dictionary["userID"] as? String,
            let nameSurname = dictionary["nameSurname"] as? String,
            let email = dictionary["email"] as? String,
            let password = dictionary["password"] as? Int,
            let profileImageUrl = dictionary["profileImageUrl"] as? String else { return nil }

        self.init(userID: userID, nameSurname: nameSurname, email: email, password: password, profileImageUrl: profileImageUrl)
    }



}

let user = User(userID: "burak", nameSurname: "burak", email: "burak", password: 1234, profileImageUrl: "brk")
print(user.userDictionary)
  

Я создал пользовательскую структуру для хранения моего свойства и записи метода init для доступа к нему как к словарю, но я хочу добавить свойство tweets (без инициализации или в обход инициализации), чтобы получить доступ к моей другой структуре, но компилятор выдает мне ошибку. Как я могу инициализировать?

 var tweets: [Tweet] 
  

Ответ №1:

Просто напишите

 self.init(userID: userID, nameSurname: nameSurname, email: email, password: password, profileImageUrl: profileImageUrl, tweets: [])
  

В противном случае объявите пустой массив и добавьте явный init метод, исключающий tweets

Комментарии:

1. Я объявил пустой массив, но из-за компилятора self.init выдает «Не удается вызвать ‘User.init’ со списком аргументов типа» эта ошибка

2. @johndouglas просто добавьте следующий параметр (tweets) и передайте пустой массив

3. Но если я объявлю массив, как я могу получить доступ к свойствам структуры Tweet ?

4. Массив предлагал не я, а вы. Используйте цикл или filter или map в зависимости от того, что вы собираетесь выполнить.

5. Я пытался спросить, как я могу обойти это свойство, которое используется без объявления в инициализаторе по умолчанию. Должен ли я создавать пользовательский инициализирующий параметр, присваивающий нулевое значение свойству tweet?