// // Extensions.swift // // // Created by Thibaut Schmitt on 13/12/2021. // import Foundation // MARK: - String public extension String { func removeCharacters(from forbiddenChars: CharacterSet) -> String { let passed = self.unicodeScalars.filter { !forbiddenChars.contains($0) } return String(String.UnicodeScalarView(passed)) } func removeCharacters(from: String) -> String { return removeCharacters(from: CharacterSet(charactersIn: from)) } func removeTrailingWhitespace() -> String { var newString = self while newString.last?.isWhitespace == true { newString = String(newString.dropLast()) } return newString } func colorComponent() -> (alpha: String, red: String, green: String, blue: String) { var alpha: String = "FF" var red: String var green: String var blue: String var colorClean = self .replacingOccurrences(of: "#", with: "") .replacingOccurrences(of: "0x", with: "") if colorClean.count == 8 { alpha = String(colorClean.prefix(2)) colorClean = String(colorClean.dropFirst(2)) } red = String(colorClean.prefix(2)) colorClean = String(colorClean.dropFirst(2)) green = String(colorClean.prefix(2)) colorClean = String(colorClean.dropFirst(2)) blue = String(colorClean.prefix(2)) return (alpha: alpha, red: red, green: green, blue: blue) } } // MARK: - Sequence extension Sequence where Iterator.Element: Hashable { public func unique() -> [Iterator.Element] { var seen: [Iterator.Element: Bool] = [:] return self.filter { seen.updateValue(true, forKey: $0) == nil } } }