Как устранить ошибку: «Невозможно использовать изменяемый элемент для неизменяемого значения: «пользователи» — это свойство, доступное только для получения» в xcode12 и swiftui

#swiftui #xcode12

#swiftui #xcode12

Вопрос:

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

Вот мой код модели профиля:

 import Foundation

struct UserProfile: Codable {
    var firstName: String
    var lastName: String
    var age: Int16
    var password: String
    var email: String
    
    
}

extension UserProfile {
    static var users: [UserProfile] {
        [
        UserProfile(firstName: "aryan", lastName: "chordia", age: 21, password: "123", email: "aryanchordia@gmail.com"),
        UserProfile(firstName: "tyler", lastName: "duic", age: 21, password: "123", email: "tduic@andrew.cmu.edu"),
        ]
    }
}

extension UserProfile {
    struct Data {
        var firstName: String = ""
        var lastName: String = ""
        var age: Int16 = 21
        var password: String = ""
        var email: String = ""
    }
    
    var data: Data {
        return Data(firstName: firstName, lastName: lastName, age: age, password: password, email: email)
    }
}
 

Вот как я пытаюсь добавить в свой массив UserProfile.users в SignUpView.swift

 func signup() -> Bool {
        let user = UserProfile(firstName: userData.firstName, lastName: userData.lastName, age: 21, password: userData.password, email: userData.email)
        UserProfile.users.append(user)
        return true
    }
 

Любая помощь с благодарностью спасибо!

Ответ №1:

Здесь вы используете вычисляемое свойство. Следовательно, значение вычисляется, и вы не можете его установить.

Вы можете создать свой массив с помощью подобной функции или сразу объявить его с правильным значением:

 static var users: [UserProfile] = {
    [
    UserProfile(firstName: "aryan", lastName: "chordia", age: 21, password: "123", email: "aryanchordia@gmail.com"),
    UserProfile(firstName: "tyler", lastName: "duic", age: 21, password: "123", email: "tduic@andrew.cmu.edu"),
    ]
}()
 

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

1. Хорошо, просто попробовал это, но я получаю сообщение об ошибке «ожидаемое объявление»

2. @AryanChordia Возможно, вы вставили код в неправильное положение не внутри класса или функции .. проверьте это.

3. Не уверен, что именно вы имеете в виду. Не могли бы вы подробнее остановиться на этом?

4. @davidev Разве это не должно быть без фигурных скобок и круглых скобок?