parameters swift ignore

parameters - ¿Cuál es el uso de parámetros ignorados en Swift?



ignore (2)

En Swift, puedes escribir lo siguiente:

func foo(_:Int) -> { return 1 }

Donde el guión bajo es un parámetro ignorado. Solo sé esto por la documentación, pero no puedo pensar en NINGÚN caso de uso sobre por qué incluso harías esto. ¿Me estoy perdiendo de algo?


Ignorar parámetros (o miembros de una tupla, que son muy parecidos a lo mismo) tiene sentido cuando:

  • Está anulando una función de superclase o implementando una función definida por un protocolo, pero su implementación de esa función no necesita uno de los parámetros. Por ejemplo, si UIApplication inicio de la aplicación pero no necesita una referencia a la instancia de UIApplication compartida en ese método:

    override func application(_: UIApplication!, didFinishLaunchingWithOptions _: NSDictionary!) -> Bool { /* ... */ }

  • Está proporcionando un cierre (también conocido como bloque en ObjC) como parámetro para algunas API, pero su uso de esa API no se preocupa por uno de los parámetros del cierre. Por ejemplo, si está enviando cambios a la biblioteca de Fotos y desea advertir al viento, puede ignorar los parámetros de success y error en el controlador de finalización:

    PHPhotoLibrary.sharedPhotoLibrary().performChanges({ // change requests }, completionHandler: { _, _ in NSLog("Changes complete. Did they succeed? Who knows!") })

  • Está llamando a una función / método que proporciona múltiples valores devueltos, pero no le importa uno de ellos. Por ejemplo, suponiendo que un método NSColor hipotético que devuelve componentes como una tupla, puede ignorar alfa:

    let (r, g, b, _) = color.getComponents()

El razonamiento detrás de esto es que hace que tu código sea más legible. Si declaras un nombre local para un parámetro (o miembro de tupla) que no terminas usando, alguien más que lea tu código (que bien podría ser la versión de ti mismo de varios meses) podría ver ese nombre y preguntarse dónde o cómo se usa en el cuerpo de la función. Si declara por adelantado que está ignorando ese parámetro (o miembro tuple), deja en claro que no hay necesidad de preocuparse por eso en ese ámbito. (En teoría, esto también podría proporcionar una sugerencia de optimización para el compilador, lo que también podría hacer que tu código corra más rápido).


Tal vez está anulando un método y su sustitución ignora uno de los parámetros? Dejar claro que está ignorando el parámetro evita que los codificadores futuros tengan que revisar su código para determinar que no está usando el parámetro y deja en claro que fue intencional. O tal vez es para crear algún tipo de patrón de Adaptador donde se aclare que uno de los parámetros se ignora.