Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- protocol StringValue {
- var asString: String {get}
- }
- protocol StringProvider {
- var value: StringValue {get}
- }
- protocol TypedStringProvider: StringProvider { // inherits from StringProvider
- associatedtype TypedStringValue: StringValue
- var typedValue: TypedStringValue { get }
- }
- extension TypedStringProvider {
- var value: TypedStringValue { return typedValue }
- }
- extension UIView: TypedStringProvider {
- typealias TypedStringValue = String
- var typedValue: String { return "Some String" }
- }
- extension Float: TypedStringProvider {
- typealias TypedStringValue = String
- var typedValue: String { return String(self) }
- }
- extension String: StringValue {
- var asString: String { return self }
- }
- func printStrings(for values: StringValue...) {
- print(values.map { $0.asString })
- }
- printStrings(for: 0.5.value.lowercased(), UIView().value.lowercased())
- extension TypedStringProvider {
- var value: TypedStringValue { return typedValue }
- var value: StringValue { return typedValue }
- }
- extension UIView {
- var value: StringValue { return typedValue }
- }
- extension Double {
- var value: StringValue { return typedValue }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement