Как удалить все данные по умолчанию только одного подпроекта?

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

  • В моем подпроекте есть 20-30 пользовательских данных по умолчанию. Итак, я думаю, что это неудобный способ, если удалять эти данные по одному.

person dueio    schedule 07.02.2019    source источник
comment
Я бы сгруппировал свои пользовательские значения по умолчанию, используя перечисления, если нет встроенной поддержки для группировки файлов .   -  person Joakim Danielson    schedule 07.02.2019
comment
Это будет хороший способ! Спасибо :)   -  person dueio    schedule 07.02.2019
comment
Но в моем случае почти ключи установлены как «другой идентификатор» + «имя ключа». Так что это сложно, если использовать перечисления.   -  person dueio    schedule 07.02.2019


Ответы (1)


вы можете использовать перечисления, чтобы объявить свои ключи для своего подпроекта и согласовать его с протоколом caseiterable, а в цикле for вы можете их удалить. Я добавил пример ниже

var unqKey = "some unique ID" //EDIT

enum SubProjectKeys  : String,CaseIterable{

    case key1
    case key2
    case key3
    case key4

    var uniqueKey : String { //EDIT

            return  unqKey + self.rawValue
        }



}


func removeKeysForSubProject() {

    let userDefaultsObj = UserDefaults()
    for key in SubProjectKeys.allCases {

        userDefaultsObj.removeObject(forKey:  key.uniqueKey) //EDIT
        userDefaultsObj.synchronize()
    }
}
person Shivam Gaur    schedule 07.02.2019
comment
Да но мои ключи не простые. Почти ключи устанавливаются как «уникальный идентификатор» + «key.rawValue». Поэтому я думаю, что это лучший способ... - person dueio; 07.02.2019
comment
Эй, dueio, что это за уникальный идентификатор, не могли бы вы уточнить, пока я редактирую свой ответ в той степени, в которой я понял ваш вопрос? - person Shivam Gaur; 07.02.2019
comment
хорошо, тогда, пожалуйста, посмотрите на приведенный выше ответ, вы можете изменить переменную unqKey здесь в соответствии с вашим именем пользователя, и при сохранении данных используйте это перечисление также во время удаления. также сделайте эту глобальную константу uniquekey, чтобы изменить ее по мере необходимости, надеюсь, это помогло !! - person Shivam Gaur; 07.02.2019
comment
Если сохраненные ключи невелики, лучше использовать enum case. Но, в моем случае, например, какой-то ключ сочетается как username + key.rawValue. (например, user1 + key1, user2 + key1, user3 + key1, user4 + key1)... Поэтому я думаю, что использование концепции «набора» лучше, чем использование перечисления. - person dueio; 07.02.2019
comment
Я только что увидел ваш новый отредактированный код! Да, я могу так использовать :) Но я запутался, что лучше между «suite» и «enum». Код становится более простым при использовании 'suite'.. - person dueio; 07.02.2019
comment
Я думаю, что способ enum более чище в коде, более удобочитаемый и без строковых литералов, задающихся вопросом в коде: p, я до сих пор не использовал набор, хотя, глядя на некоторые примеры, вы также можете реализовать его через костюм и использовать перечисления одновременно время. :), надеюсь, я попытался дать некоторое представление!! - person Shivam Gaur; 07.02.2019