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