· 7 years ago · Jan 06, 2018, 08:52 AM
1import Foundation
2
3let sampleInputs = [
4 "OAuth Token",
5 "Hello-World!",
6]
7
8extension String {
9 func capitalized() -> String {
10 guard let firstCharacter = self.characters.first else { return "" }
11 return self.replacingCharacters(in: (self.startIndex)...(self.startIndex), with: String(firstCharacter).uppercased())
12 }
13}
14
15func fix(_ input: String) -> String {
16 let words = input.split(whereSeparator: { character in
17 return character == " " || character == "-"
18 })
19 var shouldCapitalizeNextWord: Bool = false
20 let output = words.reduce("") { (output, word) -> String in
21 let fixedWord = word.lowercased().trimmingCharacters(in: .punctuationCharacters)
22 if shouldCapitalizeNextWord {
23 return output.appending(fixedWord.capitalized())
24 } else {
25 shouldCapitalizeNextWord = true
26 return output.appending(fixedWord)
27 }
28 }
29 return output
30}
31
32let fixed = sampleInputs.map { fix($0) }
33// [ "oauthToken", "helloWorld"]