Swift Language Variaciones de sintaxis


Ejemplo

La sintaxis básica de cierre es

{ [ lista de captura ] ( parámetros ) throws-ness -> return type in body } .

Muchas de estas partes se pueden omitir, por lo que hay varias formas equivalentes de escribir cierres simples:

let addOne = { [] (x: Int) -> Int in return x + 1 }
let addOne = { [] (x: Int) -> Int in x + 1 }
let addOne = { (x: Int) -> Int in x + 1 }
let addOne = { x -> Int in x + 1 }
let addOne = { x in x + 1 }
let addOne = { $0 + 1 }

let addOneOrThrow = { [] (x: Int) throws -> Int in return x + 1 }
let addOneOrThrow = { [] (x: Int) throws -> Int in x + 1 }
let addOneOrThrow = { (x: Int) throws -> Int in x + 1 }
let addOneOrThrow = { x throws -> Int in x + 1 }
let addOneOrThrow = { x throws in x + 1 }
  • La lista de captura se puede omitir si está vacía.
  • Los parámetros no necesitan anotaciones de tipo si se pueden inferir sus tipos.
  • No es necesario especificar el tipo de retorno si se puede inferir.
  • Los parámetros no tienen que ser nombrados; en su lugar, se pueden referir con $0 , $1 , $2 , etc.
  • Si el cierre contiene una sola expresión, cuyo valor debe devolverse, se puede omitir la palabra clave return .
  • Si se infiere que el cierre produce un error, se escribe en un contexto que espera un cierre de lanzamiento, o si no se produce un error, se pueden omitir los throws .
// The closure's type is unknown, so we have to specify the type of x and y.
// The output type is inferred to be Int, because the + operator for Ints returns Int.
let addInts = { (x: Int, y: Int) in x + y }

// The closure's type is specified, so we can omit the parameters' type annotations.
let addInts: (Int, Int) -> Int = { x, y in x + y }
let addInts: (Int, Int) -> Int = { $0 + $1 }