Skip to content

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
You can’t perform that action at this time.