Instantly share code, notes, and snippets.

@fitomad fitomad/swift5_SE-0228.swift Secret
Created Jan 21, 2019

Embed
What would you like to do?
// 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