2017-08-09 66 views
7

Używam szybkiego do mojego rozwoju aplikacji i używania szybkiego lint dla. Ale otrzymuję ostrzeżenie o następującym kodzie:Ostrzeżenie: Uwaga: W przypadku wykroczenia: klauzule "where" są preferowane w stosunku do pojedynczego `if` w wyrazie` for`. (for_where)

for settingsKeys in searchResults { 

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

zrzut ekranu jest dołączony niniejszym:

enter image description here

+0

Co jest pytanie tutaj? –

Odpowiedz

8

Składnia preferowane przez konfiguracji swiftlint jest:

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

Która jest podobny do

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

Jeśli wiesz, że istnieje tylko jeden wynik z tego samego key, można korzystać bezpośrednio

if let settingsKeys = (searchResults.first { $0.key == settingsObject.key }) { 
    settingsKeys.value = settingsObject.value 
    try context.save() 
} 
+0

Jeśli chcesz zachować to samo zachowanie przy użyciu filtru, musisz '.lazy.filter'pl – Alexander

+0

@Alexander True, nie chciał wchodzić w takie szczegóły. – Sulthan

2

wygląda jakby oczekując where być częścią for ...

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