English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En este artículo, aprenderá diferentes funciones definidas por el usuario, que obtendrán diferentes tipos de entrada y devolverán salida a través de ejemplos.
En el artículo anteriorFunciones en SwiftHemos aprendido sobre funciones. Ahora, exploraremos diferentes formas y tipos de creación de funciones en Swift, es decir, manejar entrada y salida en funciones.
Estos tipos de funciones no aceptan ningún parámetro de entrada ni valor de retorno.
func funcname() { //Instrucciones } O func funcname() -> () { //Instrucciones } O func funcname() -> Void { //Instrucciones }
Todas las sintaxis anteriores son válidas para crear funciones sin parámetros ni valor de retorno.
La sintaxis func funcname()->() también es equivalente a func funcname()->void, ya que void es un alias de tipo para () . Puede acceder aAlias de tipo SwiftPara obtener más información.
func greetUser() { print("Good Morning!") } greetUser()
Cuando ejecute el programa anterior, la salida será:
Good Morning!
Estos tipos de funciones no aceptan ningún parámetro de entrada, sino que devuelven un valor. Para agregar un tipo de retorno, necesita agregar una flecha (-Y el tipo de retorno.
func funcname() -> ReturnType { //Instrucciones return value }
func greetUser() -> String { return "Good Morning!" } let msg = greetUser() print(msg)
Cuando ejecute el programa anterior, la salida será:
Good Morning!
En el programa anterior, ha definido el tipo de retorno como String. Ahora, la sentencia debe devolver una cadena desde dentro de la función, de lo contrario lanzará un error.
La palabra clave return transfiere el control del programa del cuerpo de la función a la llamada de la función. Si necesita devolver un valor desde la función, agregue el valor que desea devolver después de la palabra clave return.
La sentencia return "Good Morning!" devuelve un valor de tipo String desde la función. Tenga en cuenta que el tipo y el valor del valor de retorno deben coincidir.
También puede asignar el valor de retorno a una variable o constante. let msg = Asignar el valor de retorno a la constante msg. Por lo tanto, la sentencia print(msg) salida"Good Morning!"。
Si desea ignorar este valor, simplemente use el subrayado _ , es decir, let _ = .
参数用于在函数中输入。参数包含参数名称和类型,后跟冒号(:)。这些类型的函数采用输入参数,但不返回值。
func funcname(parameterName: Type) { //Instrucciones }
func greetUser(msg: String) { print(msg) } greetUser(msg: "Good Morning!")
Cuando ejecute el programa anterior, la salida será:
Good Morning!
在上述程序中,该函数接受字符串类型的单个参数。该参数只能在函数内部使用。msg是参数的名称。
您可以通过向函数传递参数名称为 msg 的字符串值来调用函数 greetUser(msg: "Good Morning!")。该参数名称只在 greetUser() 函数内部可见。
因此,print(msg)语句输出 "Good Morning!"。
这些类型的函数使用参数并返回值。
func funcname(parameterName: Type) -> ReturnType { //Instrucciones }
func greetUser(name: String) -> String { return "Good Morning! " + name } let msg = greetUser(name: "Jack") print(msg)
Cuando ejecute el programa anterior, la salida será:
Good Morning! Jack
在上面的程序中,该函数接受String类型的单个参数,并且还返回String类型的值“Good Morning! Jack”。
这些类型的函数采用以逗号分隔的多个参数,并且还返回多个值。您可以使用元组在Swift中返回多个值。
func funcname(parameterName: Type, parameterName2: Type, ...) -> (ReturnType, ReturnType...) { //Instrucciones }
func greetUser(name: String, age: Int) -> (String, Int) { let msg = "Good Morning!" + name var userage = age if age < 0 { userage = 0 } return (msg, userage) } let msg = greetUser(name: "Jack", age: -2) print(msg.0) print("You have \(msg.1) coins left")
Cuando ejecute el programa anterior, la salida será:
Good Morning!Jack You have 0 coins left
En el programa anterior, la función greetUser() acepta múltiples parámetros de tipo String y Int. La función también devuelve múltiples valores, de tipo String y Int.
Para acceder a cada valor de retorno, usamos la posición de índice 0,1, … Aquí, usamos msg.0 para acceder a "Good Morning!Jack" y msg.1 Acceder a "0".
El uso de posiciones de índice a veces puede ser poco intuitivo y de difícil lectura. Podemos resolver este problema de manera elegante nombrando los valores de retorno. El programa anterior también se puede rewrite de la siguiente manera.
func greetUser(name: String, coins: Int) -> (name: String, coins: Int) { let msg = "Good Morning!" + name var userCoins = coins if coins < 0 { userCoins = 0 } return (msg, userCoins) } let msg = greetUser(name: "Jack", coins: -2) print(msg.name) print("You have \(msg.coins) coins left")
En este programa, el tipo de retorno es una tupla que contiene nombres de variables con ese tipo. La principal ventaja de esto es que puede usar los nombres de variables msg.name y msg.coins en lugar de msg.0 y msg.1 para acceder a los resultados.
Al definir una función que recibe entrada, se puede definir el nombre de entrada con la ayuda del nombre del parámetro. Sin embargo, hay otro nombre que se puede usar junto con el nombre del parámetro, conocido como etiqueta de parámetro.
El uso de etiquetas de argumento permite llamar a la función de manera expresiva, similar a la manera de una oración, al mismo tiempo que proporciona un cuerpo de función legible y claro en términos de intención.
Cada parámetro de función tiene una etiqueta de parámetro y un nombre de parámetro. Por defecto, el parámetro usa su nombre de parámetro como su etiqueta de parámetro. Sin embargo, si define explícitamente el nombre del parámetro, se usará la etiqueta de parámetro al llamar a la función.
La sintaxis de una función con etiqueta de argumento es
func funcname(argumentLabel parameterName:Type)-> Tipo de retorno { //Instrucciones }
Veamos esto en el siguiente ejemplo.
let result = sum(a: -> Int { return a + b } , b: 2Cuando llama a la función, puede notar que la llamada a la función no es expresiva 3) print("La suma es \(result)")
Cuando ejecute el programa anterior, la salida será:
La suma es 5
función con mejor llamada pero no como nombre de parámetro
func sum(of:Int, and:Int)/return of
let result = sum(of: 2, and: 3)
and
función con mejor llamada pero no como nombre de parámetro -> Int { func sum(of:Int, and:Int) + return of } let result = sum(of: 2, and: 3) print("La suma es \(result)")
and + and para encontrar la suma de dos números. Ahora, esto hace que el cuerpo de la función sea menos legible. Usar a y b en lugar de of&and en el cuerpo de la función será más significativo.
Para esto, debemos definir explícitamente las etiquetas de parámetro:
func sum(of a:Int, and b:Int) -> Int { return a + b } let result = sum(of: 2, and: 3) print("La suma es \(result)")
En el programa anterior, la función acepta dos parámetros de tipo Int. La llamada a la función utiliza etiquetas de parámetro of&and, lo que también tiene más sentido al llamar a la función sum(of: 2, and: 3) en lugar de sum(a: 2, b: 3)。
Además, el cuerpo de la función utiliza los nombres de parámetros a y b, en lugar de of&and, lo que también tiene más sentido en operaciones aplicativas.
También puede omitir los etiquetas de parámetro escribiendo una subrayada _ delante del nombre del parámetro.
func sum(_ a:Int, _ b:Int) -> Int { return a + b } let result = sum(2, 3) print("La suma es \(result)")
Puede proporcionar un valor predeterminado para cualquier parámetro de una función, asignando un valor al parámetro después de su tipo. Proporcionar un valor predeterminado permite omitir el parámetro al llamar a la función.
Si no se pasa un valor a un parámetro al llamar a la función, se utiliza su valor predeterminado. Sin embargo, si se pasa un valor explícitamente a un parámetro al llamar, se utiliza el valor especificado.
func funcname(parameterName:Type = value) -> Tipo de retorno { //Instrucciones }
func sum(of a:Int = 7, and b:Int = 8) -> Int { return a + b } let result1 = sum(of: 2, and: 3) print("La suma es \(result"1)) let result2 = sum(of: 2) print("La suma es \(result"2)) let result3 = sum(and: 2) print("La suma es \(result"3)) let result4 = sum() print("La suma es \(result"4))
Cuando ejecute el programa anterior, la salida será:
La suma es 5 La suma es 10 La suma es 9 La suma es 15
En el programa anterior, la función sum(of a :Int =}} 7 , and b:Int = 8) -> Int acepta dos parámetros de tipo Int y especifica el parámetro a=7y b=8el valor predeterminado.
Si se transmite value como parámetro en la llamada a la función, sum(of: 2, and: 3) se usa2y3en lugar del valor predeterminado del parámetro.
pero si no transmite el valor del parámetro como sum(), se utilizará el valor predeterminado7y8como valor de parámetro.
Los parámetros variables pueden aceptar cero o más valores de un tipo específico. Puede especificar un parámetro variable insertando tres puntos (...) después del nombre del tipo del parámetro.
Generalmente se utiliza parámetros variables cuando se necesita transmitir varias cantidades de valores de entrada a los parámetros en la llamada a la función. Por ejemplo, lista de números, lista de letras, etc.
La sintaxis de la función con parámetros variables es:
func funcname(parameterName: Type...) -> Tipo de retorno { //Instrucciones }
func sum(of numbers: Int...) { var result = 0 for num in numbers { result += num } print("La suma de los números es \(result)") } sum(of: 1, 2, 3, 4, 5, 6, 7, 8)
En el programa anterior, la función sum(of numbers: Int...) acepta parámetros variables de tipo Int. Los parámetros variables pueden aceptar múltiples valores separados por comas sum(of: 1, 2, 3, 4, 5, 6, 7, 8)。
como valores transmitidos como parámetros variables1,2,3,4,5,6,7,8Se puede usar como array de tipo Int dentro del cuerpo de la función. Por lo tanto, podemos pasar for-in se aplica en el bucle for num in numbers.
Cuando ejecute el programa anterior, la salida será:
La suma de los números es 36
Nota: La función integrada print() de Swift también acepta parámetros variables de cualquier tipo.
Any representa cualquier tipo de datos en Swift, como Int, Float, Double, String, etc.
Al definir parámetros de función, no se puede modificar el parámetro de la función dentro del cuerpo. Por lo tanto, por defecto, son constantes. Vamos a ver un ejemplo:
func process(name: String) { if name == ""{ name = "guest" } }
El programa anterior causará un error en tiempo de compilación porque no puede cambiar el valor del parámetro.
Si desea que la función modifique el valor del parámetro,则需要将参数定义为 in-Parámetro de salida. Puede escribir una entrada/parámetro de salida.
En segundo plano, un-El parámetro de salida tiene un valor que se transmite a la función, se modifica dentro de la función y luego se transmite de vuelta para reemplazar el valor original. Por lo tanto, el valor transmitido en la llamada a la función no puede ser una constante. Debe declararlo como una variable.
La sintaxis de las funciones con parámetros inout es:}}
func funcname(parameterName: inout Type) -> Tipo de retorno { //Instrucciones }
func process(name: inout String) { if name == ""{ name = "guest" } } var userName = "" process(name: &userName) print(userName)
Cuando ejecute el programa anterior, la salida será:
guest
En el programa anterior, declaramos una función que acepta parámetros inout para que se pueda modificar/Cambiar el parámetro name.
Al pasar parámetros a in-Cuando se pasa un parámetro out, debe usarse directamente el símbolo & delante del nombre de la variable para que la función pueda modificarlo.