Импортировать userDefaults как [Int], затем выполнить итерацию с помощью forloop и switch? - PullRequest
0 голосов
/ 16 ноября 2018

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

var userCustomDateArrayForSaving = []
var defaultsUser = UserDefaults(suiteName: "group.prefsettings.myapp")

и набор кнопок с тегами следующим образом: кнопки с тегами

Когда кнопки нажимаются, их тег добавляется к переменной userCustomDateArrayForSaving, и когда пользователь нажимает «сохранить»:

defaultsUser?.setValue(userCustomDateArrayForSaving, forKey: "dateSettings")
defaultsUser?.synchronize()

Итак, в итоге это может быть равно [0, 53,52,10,52,22]


Тогда, с другой стороны, мне нужно сделать:

var dateStampDefaults = UserDefaults(suiteName: "group.prefsettings.myapp")!.array(forKey: "dateSettings") as? [Int] ?? [Int]()

и когда нажата кнопка даты, я пытался заставить цикл for повторять этот массив и «декодировать» его следующим образом:

@objc func myStampsDatePressed(sender: UIButton!) {
    //
    let date = Date()
    let calendar = Calendar.current

    let proxy = textDocumentProxy as UITextDocumentProxy
    let formatter = DateFormatter()

    var localTranslatedDateString = "   "

    for dateMacro in dateStampDefaults {

        switch dateMacro {
        case 0:
            return localTranslatedDateString.append(contentsOf: (formatter.weekdaySymbols[calendar.component(.weekday, from: date)]))
        case 1:
            return localTranslatedDateString.append(contentsOf: (formatter.shortWeekdaySymbols[calendar.component(.weekday, from: date)]))
        case 2:
            return localTranslatedDateString.append(contentsOf: (formatter.veryShortWeekdaySymbols[calendar.component(.weekday, from: date)]))
        case 10:
            return localTranslatedDateString.append(contentsOf: (formatter.monthSymbols[calendar.component(.month, from: date)]))
        case 11:
            return localTranslatedDateString.append(contentsOf: (formatter.shortMonthSymbols[calendar.component(.month, from: date)]))
        case 12:
            return localTranslatedDateString.append(contentsOf: (formatter.veryShortMonthSymbols[calendar.component(.month, from: date)]))
    ...(etc)    
    }

    let str = formatter.string(from: Date())
    myStampLengthForDelete = str
    proxy.insertText(localTranslatedDateString)

}

... чтобы кто-то мог указать, например, свою дату «понедельник, 1 декабря».

Может кто-нибудь дать совет? Спасибо!

1 Ответ

0 голосов
/ 16 ноября 2018

Так что да ... у вас есть простое опечатка.

defaultsUser?.setValue(userCustomDateArrayForSaving, forKey: "dateSettings")
defaultsUser?.synchronize()

var dateStampDefaults = UserDefaults(suiteName: "group.prefsettings.myapp")!.array(forKey: "dateSetting") as? [Int] ?? [Int]()

должно быть

var dateStampDefaults = UserDefaults(suiteName: "group.prefsettings.myapp")!.array(forKey: "dateSettings") as? [Int] ?? [Int]() //THE last s IN dateSetting(s)

Примечание:

Проверено ниже и напечатано [0, 53, 52, 10, 52, 2].

var userCustomDateArrayForSaving = [0, 53,52,10,52,2]
var defaultsUser = UserDefaults(suiteName: "group.prefsettings.myapp")

defaultsUser?.setValue(userCustomDateArrayForSaving, forKey: "dateSettings")
defaultsUser?.synchronize()

var dateStampDefaults = UserDefaults(suiteName: "group.prefsettings.myapp")!.array(forKey: "dateSettings") as? [Int] ?? [Int]()

print(dateStampDefaults)
...