-
-
Save fitomad/4119f6452c32eabcf2f2961a33bfdd1f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Creamos esta estructura que nos | |
// servirá como base para el ejemplo | |
public struct User | |
{ | |
public enum Category | |
{ | |
case usuario | |
case root | |
} | |
public var name: String | |
public var category: Category | |
public init(named name: String, employedAs category: Category) | |
{ | |
self.name = name | |
self.category = category | |
} | |
} | |
// Implementamos la interpolación personalizada | |
// para la estructura `User`. | |
extension String.StringInterpolation | |
{ | |
// Tipos de de salida por consola | |
public enum Style | |
{ | |
case short | |
case medium | |
case detailed | |
} | |
/** | |
Cuando en un `String` se usa interpolación con una estructura `User` | |
*/ | |
public mutating func appendInterpolation(_ value: User) -> Void | |
{ | |
appendLiteral(value.name) | |
} | |
/** | |
Cuando en un `String` se usa interpolación con una estructura `User` | |
y además queremos obtener más personalización en la salida. | |
- Parameters: | |
- value: El `User`cuya información vamos a mostrar | |
- style: Tipo de salida | |
*/ | |
public mutating func appendInterpolation(_ value: User, style: Style) -> Void | |
{ | |
switch style | |
{ | |
case .short: | |
appendLiteral(value.name) | |
case .medium: | |
appendInterpolation("\(value.name) es \(value.category)") | |
@unknown default: | |
appendInterpolation("El usuario: \(value.name) trabaja con el cargo de \(value.category)") | |
} | |
} | |
} | |
// | |
// Empezamos con los ejemplos | |
// | |
let me = User(named: "Adolfo", employedAs: .root) | |
print("Usuario conectado: \(me)") | |
// Sin StringInterpolation saldría esto | |
// Usuario conectado: User(name: "Adolfo", category: test.User.Category.root) | |
// Con StringInterpolation esto: | |
// Usuario conectado: Adolfo | |
// Vamos a probar la sobrecarga de la interpolación | |
print("Detalles... \(me, style: .medium)") | |
// Detalles... Adolfo es root | |
print("Detalles... \(me, style: .detailed)") | |
// Detalles... El usuario: Adolfo trabaja con el cargo de root |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment