Swiftlint warning: for Where Violation: where clauses are preferable to one if if inside a for. (For_where)

I use swift to develop my application and use a fast lint. But I get a warning regarding the following code:

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

Screenshot attached:

enter image description here

+7
swift3 xcode8 swiftlint
source share
2 answers

The syntax preferred by your swiftlint configuration is as follows:

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

What looks like

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

If you know that there is only one result with the same key , you can directly use

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

It looks like he expects where be part of for ...

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

All Articles