Solving algorithms with reduce
We can solve algorithms with reduce by following a functional approach. The following lines declare a new getNamesSeparatedBy method for our previously coded GameRepository class that solves an algorithm by calling the reduce method. The code file for the sample is included in the swift_3_oop_chapter_07_31 folder:
    open func getNamesSeparatedBy(separator: String) -> String { 
      let gamesNames = getUppercasedNames() 
      return gamesNames.reduce("") { 
        concatenatedGameNames, gameName in 
        print(concatenatedGameNames) 
        let separatorOrEmpty = (gameName == gamesNames.last) ? "" : 
        separator 
        return "\(concatenatedGameNames)\(gameName)\(separatorOrEmpty)" 
      } 
    }  
The getNamesSeparatedBy method receives a separator argument of the String type and returns a String value. The code calls the getUppercasedNames method and saves the result in the gamesNames reference constant. Then...