Как мне получить доступ к элементу структуры в массиве на основе условия, а затем работать с этим членом в Swift 4? - PullRequest
0 голосов
/ 18 апреля 2019

Я ищу определенную строку в элементе массива Struct, если я ее нахожу, я добавляю к доверительному числу в Struct, и если я его не нахожу, я добавляю его в Struct.Если он находится в структуре, но не во входной строке, то я убираю уверенность.Возможно, я смогу объяснить это лучше, если перейду к варианту использования и рабочему процессу:

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

  1. Запуск оптического распознавания (работает)
  2. Передача вывода OCR через регулярное выражение и построение массива String из идентифицированных элементов.Давайте назовем его «identifReferencesThisLoop» (работает)
  3. При первом проходе он помещает весь вывод OCR в массив Struct, который имеет два члена: String и уровень достоверности (начинается с 5).Давайте назовем этот массив Struct «identifReferences» (работает)
  4. . На следующих проходах он просматривает член выходного массива OCR по элементам и определяет, находится ли он в массиве Struct «identifReferences».
    • Если есть новая ссылка, она помещает ее в массив Struct (работает)
    • Если ссылка существует, она добавляет уверенности (не работает!)
    • Если ссылка существует в Структуре, но отсутствует в identifReferencesThisLoop, то она отнимает 0,5 от Доверия (не реализовано!)
    • Если ссылка когда-либо достигает Доверия 0, то она удаляется из Структуры
  5. Если определенное количество членов массива Struct имеет достаточно высокую достоверность, тогда массив Struct передается в Segue, который отображает Struct в виде таблицы.

Большая проблема, с которой я столкнулся, заключается в том, что я не могу понять, как работать с элементом структуры в цикле.

Я пытался использовать whiles и fors, а .filter и .mapи $ 0 - мне удалось перекрестно ссылаться на таблицы, чтобы ДОБАВИТЬ запись, но я не знаю, как оштрафовать запись за то, что она редко отображается в OCR, или как придать уверенность той, которая постоянно отображается, или какудалить запись с низкой достоверностью.

Определение структуры:

struct referenceIdentified {
    var reference: String?
    var confidence: Int
}

В классе:

private var references: [referenceIdentified] = []

В частной функции:

let referencesThisLoop = OCROutput.regexFunction() // outputs [String]

for index in referencesThisLoop {
    if self.references.filter({ $0.reference == index }).first != nil {
        references.confidence(at: index) += 1 // gives error "Value of type '[referenceIdentified]' has no member 'confidence'"
        print(index + " found")
    } else {
        self.references.append(referenceIdentified(reference: index, confidence: 5))
        print(index + " not found, added.")
    }
}

В конце таблица выходит неплохо, но все значения доверия равны 5, что бессмысленно, и в итоге в таблице появляется множество неверных записей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...