Fonctions rapides
Les fonctions Swift sont des blocs de code indépendants utilisés pour accomplir des tâches spécifiques.
Swift utilise une syntaxe unifiée pour représenter des fonctions simples de style C en méthodes complexes de style Objective-C.
Déclaration de fonction : Indiquez au compilateur le nom, le type de retour et les paramètres de la fonction.
Définition de la fonction : Fournit l'entité de la fonction.
Les fonctions Swift incluent des types de paramètres et des types de valeurs de retour :
Définition de fonction
Swift définit les fonctions à l'aide du mot-clé func .
Lors de la définition d'une fonction, vous pouvez spécifier un ou plusieurs paramètres d'entrée et un type de valeur de retour.
Chaque fonction a un nom de fonction pour décrire sa fonction. Cette fonction est appelée via le nom de la fonction et les valeurs des paramètres des types correspondants. Les paramètres de la fonction doivent être passés dans le même ordre que la liste des paramètres.
Les paramètres réels de la fonction doivent être transmis dans le même ordre que la liste formelle des paramètres, et le type de valeur de retour de la fonction est défini après ->.
Syntaxe
func funcname(形参) -> returntype { Statement1 Statement2 …… Statement N return parameters }
Exemple
Ci-dessous, nous définissons une fonction nommée php, le type de données du paramètre formel est String et la valeur de retour est également String :
import Cocoa func php(site: String) -> String { return site } print(php("www.php.cn"))
Le résultat de sortie de l'exécution du programme ci-dessus est :
www.php.cn
Appel de fonction
Nous pouvons appeler la fonction via le nom de la fonction et la valeur du paramètre correspondant type et l'ordre dans lequel les paramètres de la fonction sont transmis doivent être les mêmes que la liste des paramètres.
Ci-dessous, nous définissons une fonction nommée php. Le type de données du site de paramètres formels est String. Ensuite, les paramètres réels que nous transmettons lors de l'appel de la fonction doivent également être de type String. corps de la fonction, ils seront directement Return, le type de données renvoyé est String.
import Cocoa func php(site: String) -> String { return site } print(php("www.php.cn"))
Le résultat de l'exécution du programme ci-dessus est :
www.php.cn
Paramètres de la fonction
La fonction peut accepter un ou plusieurs paramètres, et nous pouvons également utiliser des tuples. Passez un ou plusieurs paramètres à la fonction :
import Cocoa func mult(no1: Int, no2: Int) -> Int { return no1*no2 } print(mult(2, no2:20)) print(mult(3, no2:15)) print(mult(4, no2:30))
Le résultat de l'exécution du programme ci-dessus est :
40 45 120
Fonction sans paramètres
On peut créer une fonction sans fonction des paramètres.
Syntaxe :
func funcname() -> datatype { return datatype }
Instance
import Cocoa func sitename() -> String { return "php中文网" } print(sitename())
Le résultat de l'exécution du programme ci-dessus est :
php中文网
Tuple comme valeur de retour de fonction
Le type de valeur de retour de la fonction peut être une chaîne, un entier, une virgule flottante, etc.
Les tuples sont similaires aux tableaux. La différence est que les éléments d'un tuple peuvent être de n'importe quel type et utiliser des parenthèses.
Vous pouvez utiliser le type tuple pour renvoyer plusieurs valeurs d'une fonction en tant que valeur composite.
Dans l'exemple suivant, une fonction nommée minMax(_:) est définie, qui est utilisée pour trouver les valeurs minimales et maximales dans un tableau Int. La fonction
import Cocoa func minMax(array: [Int]) -> (min: Int, max: Int) { var currentMin = array[0] var currentMax = array[0] for value in array[1..<array.count] { if value < currentMin { currentMin = value } else if value > currentMax { currentMax = value } } return (currentMin, currentMax) } let bounds = minMax([8, -6, 2, 109, 3, 71]) print("最小值为 \(bounds.min) ,最大值为 \(bounds.max)")
minMax(_:) renvoie un tuple contenant deux valeurs Int, étiquetées min et max afin qu'elles soient accessibles par nom lors de l'interrogation de la valeur de retour de la fonction.
Le résultat de l'exécution du programme ci-dessus est :
最小值为 -6 ,最大值为 109
Si vous n'êtes pas sûr que le tuple renvoyé ne doit pas être nul, vous pouvez renvoyer un type de tuple facultatif.
Vous pouvez définir un tuple facultatif en plaçant un point d'interrogation après le crochet fermant du type de tuple, tel que (Int, Int) ou (String, Int, Bool) ?
Notez que les types de tuples facultatifs
tels que(Int, Int)?
sont différents des tuples contenant des types facultatifs tels que(Int?, Int?)
Pour les types de tuples facultatifs, le tuple entier est facultatif, et pas seulement chaque valeur d'élément dans. le tuple.
La fonction minMax(_:)
précédente renvoie un tuple contenant deux valeurs Int
. Mais la fonction n'effectue aucun contrôle de sécurité sur le tableau passé. Si l'argument array
est un tableau vide, minMax(_:)
tel que défini ci-dessus déclenchera une erreur d'exécution lors de la tentative d'accès à array[0]
.
Pour gérer en toute sécurité ce problème de "tableau vide", réécrivez la fonction minMax(_:)
pour utiliser un type de retour de tuple facultatif et renvoyez nil
lorsque le tableau est vide :
import Cocoa func minMax(array: [Int]) -> (min: Int, max: Int)? { if array.isEmpty { return nil } var currentMin = array[0] var currentMax = array[0] for value in array[1..<array.count] { if value < currentMin { currentMin = value } else if value > currentMax { currentMax = value } } return (currentMin, currentMax) } if let bounds = minMax([8, -6, 2, 109, 3, 71]) { print("最小值为 \(bounds.min),组大值为 \(bounds.max)") }
La sortie de l'exécution du programme ci-dessus est :
最小值为 -6,组大值为 109
Fonction sans valeur de retour
Ce qui suit est une autre version de la fonction php(_:) Cette fonction reçoit l'URL du site officiel du site Web chinois php. paramètre, Le type de valeur de retour n'est pas spécifié et la valeur de chaîne est affichée directement au lieu de la renvoyer :
import Cocoa func php(site: String) { print("php中文网官网:\(site)") } php("http://www.php.cn")
Le résultat de l'exécution du programme ci-dessus est :
php中文网官网:http://www.php.cn
Nom du paramètre de fonction
Les paramètres de fonction ont un nom de paramètre externe et un nom de paramètre local.
Noms des paramètres locaux
Les noms des paramètres locaux sont utilisés en interne dans l'implémentation de la fonction.
func sample(number: Int) { println(number) }
Dans l'exemple ci-dessus, number est un nom de paramètre local et ne peut être utilisé que dans le corps de la fonction.
import Cocoa func sample(number: Int) { print(number) } sample(1) sample(2) sample(3)
Le résultat de l'exécution du programme ci-dessus est :
1 2 3
Nom du paramètre externe
Vous pouvez spécifier le nom du paramètre externe avant le nom du paramètre local, séparé par des espaces au milieu , le nom du paramètre externe est Pour les paramètres transmis à la fonction lors de son appel.
Comme suit, vous pouvez définir les deux noms de paramètres de fonction suivants et les appeler :
import Cocoa func pow(firstArg a: Int, secondArg b: Int) -> Int { var res = a for _ in 1..<b { res = res * a } print(res) return res } pow(firstArg:5, secondArg:3)
Le résultat de sortie de l'exécution du programme ci-dessus est :
125
Remarque
Si vous Si un nom de paramètre externe est fourni, le nom du paramètre externe doit être utilisé lorsque la fonction est appelée.
Paramètres variadiques
Les paramètres variadiques peuvent accepter zéro ou plusieurs valeurs. Lors de l'appel d'une fonction, vous pouvez utiliser des paramètres variables pour spécifier les paramètres de la fonction, et le nombre est indéterminé.
Les paramètres de variable sont définis en ajoutant (...) après le nom du type de variable.
import Cocoa func vari<N>(members: N...){ for i in members { print(i) } } vari(4,3,5) vari(4.5, 3.1, 5.6) vari("Google", "Baidu", "php")
Le résultat de sortie de l'exécution du programme ci-dessus est :
4 3 5 4.5 3.1 5.6 Google Baidu php
Paramètres constants, variables et d'E/S
Généralement, les paramètres définis dans la fonction sont des paramètres constants par défaut, c'est-à-dire que vous pouvez uniquement interroger et utiliser ce paramètre, et vous ne pouvez pas modifier sa valeur.
Si vous souhaitez déclarer un paramètre variable, vous pouvez ajouter var devant, afin que la valeur du paramètre puisse être modifiée.
Par exemple :
func getName(var id:String).........
À ce moment, la valeur de l'identifiant peut être modifiée dans la fonction.
Généralement, le passage du paramètre par défaut est appelé par valeur, et non par référence. Par conséquent, le paramètre transmis est modifié dans la fonction et n’affecte pas le paramètre d’origine. Ce qui est transmis n'est qu'une copie de ce paramètre.
Les paramètres variables, comme mentionné ci-dessus, ne peuvent être modifiés que dans le corps de la fonction. Si vous souhaitez qu'une fonction modifie la valeur d'un paramètre et que vous souhaitez que ces modifications persistent après l'appel de la fonction, vous devez alors définir le paramètre en tant que paramètres In-Out.
Lors de la définition d'un paramètre d'entrée et de sortie, ajoutez le mot-clé inout avant la définition du paramètre. Un paramètre d'entrée et de sortie a la valeur transmise à la fonction, cette valeur est modifiée par la fonction, puis transmise hors de la fonction, remplaçant la valeur d'origine.
Exemple
import Cocoa func swapTwoInts(var a:Int,var b:Int){ let t = a a = b b = t } var x = 0,y = 100 print("x = \(x) ;y = \(y)") swapTwoInts(x, b:y) print("x = \(x) ;y = \(y)")
Le résultat de l'exécution du programme ci-dessus est :
x = 0 ;y = 100 x = 0 ;y = 100<pLe paramètre transmis à ce moment est une copie de la valeur d'origine, donc cette fonction n'échangera pas les deux valeurs. < p="">
La méthode de modification consiste à utiliser le mot-clé inout :
import Cocoa func swapTwoInts(inout a:Int,inout b:Int){ let t = a a = b b = t } var x = 0,y = 100 print("x = \(x) ;y = \(y)") swapTwoInts(&x, b:&y) print("x = \(x) ;y = \(y)")
Le résultat de sortie de l'exécution du programme ci-dessus est :
x = 0 ;y = 100 x = 100 ;y = 0
Type de fonction et utilisation
Chaque fonction a un type de fonction spécifique, qui comprend le type de paramètre et le type de retour de la fonction. L'exemple de
func inputs(no1: Int, no2: Int) -> Int { return no1/no2 }
est le suivant :
import Cocoa func inputs(no1: Int, no2: Int) -> Int { return no1/no2 } print(inputs(20,no2:10)) print(inputs(36,no2:6))
Le résultat de l'exécution du programme ci-dessus est :
2 6
La fonction ci-dessus définit deux types de paramètres Int et la valeur de retour est également de type Int.
Jetons ensuite un coup d'œil à la fonction suivante. La fonction définit les paramètres comme type String et renvoie la valeur comme type String. La fonction
Func inputstr(name: String) -> String { return name }
peut également définir n'importe quel paramètre et type, comme indiqué ci-dessous :
import Cocoa func inputstr() { print("php中文网") print("www.php.cn") } inputstr()
Le résultat de sortie de l'exécution du programme ci-dessus est :
php中文网 www.php.cn
Utilisez la fonction tapez
Dans Swift, vous travaillez avec des types de fonctions comme n'importe quel autre type. Par exemple, vous pouvez définir une constante ou une variable de type fonction et lui affecter la fonction appropriée :
var addition: (Int, Int) -> Int = sum
Analyse :
" Définir une variable appelée addition
avec les paramètres La valeur de retour les types sont tous Int
, et laissez cette nouvelle variable pointer vers la fonction sum
".
sum
et addition
ont le même type, donc l'opération ci-dessus est légale.
Maintenant, vous pouvez utiliser l'addition pour appeler la fonction assignée :
import Cocoa func sum(a: Int, b: Int) -> Int { return a + b } var addition: (Int, Int) -> Int = sum print("输出结果: \(addition(40, 89))")
Le résultat de sortie de l'exécution du programme ci-dessus est :
输出结果: 129
Le type de fonction est utilisé comme type de paramètre, Type de fonction comme type de retour
Nous pouvons passer la fonction en tant que paramètre à un autre paramètre :
import Cocoa func sum(a: Int, b: Int) -> Int { return a + b } var addition: (Int, Int) -> Int = sum print("输出结果: \(addition(40, 89))") func another(addition: (Int, Int) -> Int, a: Int, b: Int) { print("输出结果: \(addition(a, b))") } another(sum, a: 10, b: 20)
Le résultat de sortie de l'exécution du programme ci-dessus est :
输出结果: 129 输出结果: 30
Imbrication de fonctions
L'imbrication de fonctions fait référence à la définition d'une nouvelle fonction au sein d'une fonction, et les fonctions externes peuvent appeler des fonctions définies dans la fonction.
L'exemple est le suivant :
import Cocoa func calcDecrement(forDecrement total: Int) -> () -> Int { var overallDecrement = 0 func decrementer() -> Int { overallDecrement -= total return overallDecrement } return decrementer } let decrem = calcDecrement(forDecrement: 30) print(decrem())
Le résultat de sortie de l'exécution du programme ci-dessus est :
-30