Ciencia Días Swift (día 6.) - Primera parte cierres (cierre: Parte 1)
1. La creación de cierres de base (la base para la creación de cierres) - Test
Puede ser utilizado como otros tipos (como cadenas y enteros) que se utilizan en las funciones Swift. Esto significa que puede crear una función y asignarla a una variable, utilice la variable llamada esta función, incluso pasar a la función como un parámetro a otra función.
Función que se utiliza de esta manera se llama el cierre , a pesar de que funcionan como una función, pero se escriben de manera diferente.
Empecemos con un ejemplo sencillo que muestra un mensaje:
let driving = {
print("我在开车")
}
Esto creará efectivamente una función sin un nombre y asignar la función a driving
. Ahora puede driving()
hacer llamadas como una llamada a la función normal de la siguiente manera:
driving()
2. La aceptación de parámetros en un cierre (cierre de los parámetros de aceptación) - Prueba
Al crear cierres, no tienen nombre o un espacio para escribir cualquier parámetro. Esto no quiere decir que no puede aceptar el argumento, pero de una manera diferente que acepta parámetros: son en los apoyos en la lista.
Para el cierre toma parámetros, que se enumeran en el paréntesis entre paréntesis después de la apertura, y después se añaden in
a conocer Swift cuerpo de cierre está comenzando.
Por ejemplo, podemos crear una cadena de nombre de lugar aceptable como su cierre parámetro sólo, de la siguiente manera:
let driving = { (place: String) in
print("我要开车去\(place)")
}
Una de las diferencias entre la función y los cierres no se utilizan cuando el cierre parámetro de etiqueta de ejecución.
driving("杭州")
3. Devolución de valores de un cierre (el valor de retorno de cierre) - Prueba
Los cierres también pueden valores, su redacción y parámetros similares regresar: Se puede escribir en un cierre, justo in
antes de la palabra clave.
Para ilustrar este punto, vamos a utilizar los driving()
cierres y devolver su valor, en lugar de imprimir directamente. Este es el original:
let driving = { (place: String) in
print("我要开车去\(place)")
}
Esperamos que los rendimientos de cierre de una cadena en lugar de imprimir los mensajes directamente, por lo que tenemos que utilizar -> String
el antes in
, y luego return
como un uso normal de la función:
let drivingWithReturn = { (place: String) -> String in
return "我要开车去\(place)"
}
Ahora, podemos ejecutar los cierres e imprimir el valor de retorno:
let message = drivingWithReturn("杭州")
print(message)
4. Los cierres como parámetros (cierre como un parámetro) - prueba
Debido a que el cierre se puede utilizar la imagen como enteros y cadenas, para que puedan ser pasados a la función.
En primer lugar, se trata de nuestros cierres básicosdriving()
let driving = {
print("I'm driving in my car")
}
Si queremos pasar el cierre de la función, de modo que pueda funcionar dentro de la función, puede especificar el tipo de parámetro () -> Void
. Esto significa que "no acepta ningún parámetro, y luego regresar Void
."
Por lo tanto, podemos escribir un travel()
comportamiento de viaje aceptable de diversas funciones, e imprime un mensaje y luego antes:
func travel(action: () -> Void) {
print("I'm getting ready to go.")
action()
print("I arrived!")
}
Ahora, podemos utilizar driving
los cierres de llamarlo, de la siguiente manera:
travel(action: driving)
5. sintaxis de cierre posterior (detrás de la gramática de cierre) - Prueba
Si el último parámetro es una función de cierre, Swift se puede denominar con el cierre de arrastre especial sintaxis . Más bien de cierre pasa como un parámetro, entre paréntesis después de la función es mejor para pasar directamente.
Para probar el punto, esta es nuestra travel()
función. Se acepta action
un cierre, de manera que los dos se pueden print()
ejecutar entre la llamada:
func travel(action: () -> Void) {
print("准备出发")
action()
print("已到达目的地,本次导航结束")
}
Debido a que es el último argumento es un cierre, por lo que podemos travel()
seguir utilizando la sintaxis de salida de cierre a la llamada , de la siguiente manera:
travel() {
print("高德导航持续为您服务")
}
De hecho, la ausencia de cualquier otro parámetro, se puede eliminar por completo paréntesis:
travel {
print("高德导航持续为您服务")
}
Se arrastra en la sintaxis de cierre de Swift es muy común.