Advertisement
Guest User

Untitled

a guest
Mar 21st, 2019
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.21 KB | None | 0 0
  1. protocol StringValue {
  2. var asString: String {get}
  3. }
  4.  
  5. protocol StringProvider {
  6. var value: StringValue {get}
  7. }
  8.  
  9. protocol TypedStringProvider: StringProvider { // inherits from StringProvider
  10. associatedtype TypedStringValue: StringValue
  11. var typedValue: TypedStringValue { get }
  12. }
  13.  
  14. extension TypedStringProvider {
  15. var value: TypedStringValue { return typedValue }
  16. }
  17.  
  18. extension UIView: TypedStringProvider {
  19. typealias TypedStringValue = String
  20. var typedValue: String { return "Some String" }
  21. }
  22.  
  23. extension Float: TypedStringProvider {
  24. typealias TypedStringValue = String
  25. var typedValue: String { return String(self) }
  26. }
  27.  
  28. extension String: StringValue {
  29. var asString: String { return self }
  30. }
  31.  
  32. func printStrings(for values: StringValue...) {
  33. print(values.map { $0.asString })
  34. }
  35.  
  36. printStrings(for: 0.5.value.lowercased(), UIView().value.lowercased())
  37.  
  38. extension TypedStringProvider {
  39. var value: TypedStringValue { return typedValue }
  40. var value: StringValue { return typedValue }
  41. }
  42.  
  43. extension UIView {
  44. var value: StringValue { return typedValue }
  45. }
  46.  
  47. extension Double {
  48. var value: StringValue { return typedValue }
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement