In Swift, protocol-oriented programming is in fashion. There’s a lot of Swift code out there that’s “protocol-oriented”, some open-source libraries even state it as a feature. I think protocols are heavily overused in Swift, and oftentimes the problem at hand can be solved in a much simpler way. In short: don’t be dogmatic about using (or avoiding) protocols.

Chris Eidhof references the WWDC 2015 talk Protocol-Oriented Programming in Swift as an example of a problem solved using protocols, and at the same time how we lose flexibility and add complexity.

“I’ve come across a situation a number of times where I write code that has to try something one or more times using a repeat…while loop and the condition relies upon variables that should be declared within the scope of the loop.”

“…creates a stateful repeat-while loop, which is more or less what I believe the writer was aiming for. It uses a Boolean test, hides the use of sequence(state:next:), and allows a trailing closure for the body of the loop.”