Не читаемый ответ JSON в Swift

+ может иметь два значения, в зависимости от контекста.

Как и другие упомянутые ответы, + обычно является оператором повторения и вызывает предыдущий токен повторять один или несколько раз. a+ будет выражаться как aa* в теории формального языка , а также может быть выражена как a{1,} (соответствует минимум 1 раз и максимум бесконечного раза).


Однако + также может делать другие кванторы притяжательной , если он следует за оператором повторения (т.е. ?+, *+, ++ или {m,n}+). Притяжательный квантификатор - это расширенная функция некоторых ароматов регулярных выражений (PCRE, Java и JGsoft engine), которая говорит движку не возвращаться назад после того, как было выполнено совпадение.

Чтобы понять, как это работает, нам нужно понять две концепции двигателей регулярных выражений: жадность и backtracking . Жадность означает, что в общем случае регулярные выражения будут пытаться потреблять столько символов, сколько могут. Скажем, наш паттерн .* ( dot - специальная конструкция в регулярных выражениях, что означает любой символ 1, звезда означает совпадение ноль или более раз), а ваша цель есть aaaaaaaab. Вся строка будет потребляться, потому что вся строка является самым длинным совпадением, которое удовлетворяет шаблону.

Однако, скажем, мы меняем шаблон на .*b. Теперь, когда движок регулярного выражения пытается сопоставлять aaaaaaaab, .* снова потребляет всю строку. Однако, поскольку двигатель достигнет конца строки, а шаблон еще не выполнен (.* потребляет все, но шаблон все же должен соответствовать b впоследствии), он будет backtrack , по одному символу за раз, и попытайтесь сопоставить b. Первый откат заставит .* потреблять aaaaaaaa, а затем b может потреблять b, и шаблон преуспевает.

Потенциальные квантификаторы также жадные, но, как уже упоминалось, после их возвращения матч, двигатель больше не может вернуться назад. Поэтому, если мы изменим наш шаблон на .*+b (сопоставим любой символ ноль или более раз, собственнически, а затем b) и попытаемся сопоставить aaaaaaaab, снова .* будет потреблять всю строку, но затем поскольку он является притяжательным, информация об отбрасывании отбрасывается, а b не может быть сопоставлена, поэтому шаблон не работает.


1 В большинстве движков точка не будет соответствовать символу новой строки, если только /s (опция «singleline» или «dotall») .

0
задан Jessica Kimble 21 February 2019 в 09:47
поделиться

1 ответ

Вы можете попробовать

do {

    let form = DateFormatter()

    form.dateFormat = "yyy-MM-dd HH:mm:ss"

    let dec = JSONDecoder()

    dec.keyDecodingStrategy = .convertFromSnakeCase

    dec.dateDecodingStrategy = .formatted(form)

    let res = try dec.decode(Root.self,from:dataNew)

    print(res)
}
catch {

    print(error)
}

struct Root: Codable {
    let status: String
    let answer: Answer
}

struct Answer: Codable {
    let address, name: String
    let createdAt, updatedAt: Date
    let userType: Int
}

Этот

DispatchQueue.main.async {

должен быть внутри обратного вызова для любого обновления пользовательского интерфейса, поскольку по умолчанию session.dataTask(with: выполняется в фоновом потоке

0
ответ дан Sh_Khan 21 February 2019 в 09:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: