Предупреждение Swiftlint: For Where Violation: предложения «where» предпочтительнее одного «if» внутри «for». (для_где)

Я использую Swift для разработки приложений и использую Swift lint. Но я получаю предупреждение о следующем коде:

for settingsKeys in searchResults {

        if  settingsKeys.key == settingsObject.key {
          settingsKeys.value = settingsObject.value
          try context.save()
        }
      }

Скриншот прилагается:

введите здесь описание изображения

Вариант автоматического исправления недоступен, так как мне убрать это предупреждение?


person Chelsea Shawra    schedule 09.08.2017    source источник
comment
В чем тут вопрос?   -  person Lasse V. Karlsen    schedule 09.08.2017


Ответы (2)


Синтаксис, предпочтительный для вашей конфигурации swiftlint:

for settingsKeys in searchResults where settingsKeys.key == settingsObject.key {
    settingsKeys.value = settingsObject.value
    try context.save()
}

Что похоже на

for settingsKeys in (searchResults.filter { $0.key == settingsObject.key }) {
    settingsKeys.value = settingsObject.value
    try context.save()
}

Если вы знаете, что есть только один результат с одним и тем же key, вы можете напрямую использовать

if let settingsKeys = (searchResults.first { $0.key == settingsObject.key }) {
    settingsKeys.value = settingsObject.value
    try context.save()
}
person Sulthan    schedule 09.08.2017
comment
Если вы хотите такое же поведение с помощью фильтра, вам понадобится .lazy.filter - person Alexander; 09.08.2017
comment
@Alexander Правда, не хотел вдаваться в такие подробности. - person Sulthan; 09.08.2017
comment
Спасибо. Мне это помогло. - person ssowri1; 14.05.2018

Похоже, ожидается, что where будет частью for

for settingsKeys in searchResults where settingsKeys.key == settingsObject.key {
    settingsKeys.value = settingsObject.value
    try context.save()
}
person Ashley Mills    schedule 09.08.2017