transportation the significado programming programación lenguaje language español descargar swift

the - Swift: función con parámetro predeterminado antes del parámetro no predeterminado



swift(lenguaje de programación) (4)

Debería tener los parámetros predeterminados al final de la lista de parámetros.

func f(second:Int, first:Int = 100){} f(10)

Coloque los parámetros con los valores predeterminados al final de la lista de parámetros de una función. Esto garantiza que todas las llamadas a la función usen el mismo orden para sus argumentos no predeterminados, y deja en claro que se está llamando a la misma función en cada caso.

Enlace de documentación

Supongamos que tengo una función que tiene un parámetro no predeterminado después de un parámetro predeterminado como este:

func f(first:Int = 100, second:Int){}

¿Cómo puedo llamarlo y usar el valor predeterminado para el primer parámetro?


El compilador actual permite los parámetros predeterminados en el medio de una lista de parámetros.

Puede llamar a la función de esta manera si desea usar el valor predeterminado para el first parámetro:

f(1)

Si desea proporcionar un nuevo valor para el first parámetro, use su nombre externo:

f(first: 3, 1)

La documentación explains que los parámetros con un valor predeterminado reciben automáticamente un nombre externo:

Swift proporciona un nombre externo automático para cualquier parámetro predeterminado que defina, si usted mismo no proporciona un nombre externo. El nombre externo automático es el mismo que el nombre local, como si hubiera escrito un símbolo hash antes del nombre local en su código.


En Swift 3:

func defaultParameterBefore(_ x: Int = 1, y: Int ) {}

Vocación

defaultParameterBefore(2)

levantará este error

error: missing argument for parameter ''y'' in call

La única excepción es:

  • Hay un parámetro antes del parámetro predeterminado;
  • y el parámetro después del parámetro predeterminado es un cierre;
  • y el parámetro de cierre es el último parámetro;
  • y llamando a través de un cierre posterior

Por ejemplo:

func defaultParameterBetween(_ x: Int, _ y: Bool = true, _ z: String) { if y { print(x) } else z() } } // error: missing argument for parameter #3 in call // defaultParameterWithTrailingClosure(1, { print(0) } // Trailing closure does work, though. func defaultParameterWithTrailingClosure(_ x: Int, y: Bool = true, _ z: () -> Void) { if y { print(x) } else { z() } } defaultParameterWithTrailingClosure(1) { print(0) }

versión rápida : DEVELOPMENT-SNAPSHOT-2016-04-12


Si es un método en una clase, debe llamarlo así

class Test { func f(first:Int = 100, second:Int) { println("first is /(first)") println("second is /(second)") } func other() { f(second: 4) f(first: 30, second: 5) //f(4) will not compile, and neither will f(9,12) } }

Si la función f es global, debe llamarla así:

f(4) f(first: 30, 5)

Esto imprime:

first is 100 second is 4 first is 30 second is 5