Fungsi Swift


Fungsi Swift ialah blok kod bebas yang digunakan untuk menyelesaikan tugas tertentu.

Swift menggunakan sintaks bersatu untuk mewakili fungsi gaya C ringkas kepada kaedah gaya Objektif-C yang kompleks.

  • Pengisytiharan fungsi: Beritahu pengkompil nama, jenis pulangan dan parameter fungsi.

  • Definisi fungsi: Menyediakan entiti fungsi.

Fungsi Swift termasuk jenis parameter dan jenis nilai pulangan:


Takrifan fungsi

Swift mentakrifkan fungsi menggunakan kata kunci fungsi .

Apabila mentakrifkan fungsi, anda boleh menentukan satu atau lebih parameter input dan jenis nilai pulangan.

Setiap fungsi mempunyai nama fungsi untuk menerangkan fungsinya. Fungsi ini dipanggil melalui nama fungsi dan nilai parameter jenis yang sepadan. Parameter fungsi mesti diluluskan dalam susunan yang sama seperti senarai parameter.

Parameter sebenar fungsi mesti dihantar dalam susunan yang sama seperti senarai parameter formal dan jenis nilai pulangan fungsi ditakrifkan selepas ->.

Syntax

func funcname(形参) -> returntype
{
   Statement1
   Statement2
   ……
   Statement N
   return parameters
}

Contoh

Di bawah kami mentakrifkan fungsi bernama php Jenis data parameter formal ialah String dan nilai pulangan juga ialah String:

import Cocoa

func php(site: String) -> String {
    return site
}
print(php("www.php.cn"))

Output pelaksanaan program di atas ialah:

www.php.cn

Panggilan fungsi

Kita boleh memanggil fungsi melalui nama fungsi dan nilai parameter jenis yang sepadan, dan tertib di mana parameter fungsi diluluskan Mesti sama dengan senarai parameter.

Di bawah ini kita mentakrifkan fungsi bernama php Jenis data tapak parameter formal ialah String Kemudian parameter sebenar yang kita lalui semasa memanggil fungsi juga mestilah daripada jenis String badan fungsi, mereka akan kembali secara langsung, jenis data yang dikembalikan ialah String.

import Cocoa

func php(site: String) -> String {
    return site
}
print(php("www.php.cn"))

Output pelaksanaan program di atas ialah:

www.php.cn

Parameter fungsi

Fungsi boleh menerima satu atau lebih parameter, dan kita juga boleh menggunakan tupel. Hantar satu atau lebih parameter kepada fungsi:

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))

Output pelaksanaan program di atas ialah:

40
45
120

Fungsi tanpa parameter

Kita boleh mencipta fungsi tanpa fungsi parameter.

Sintaks:

func funcname() -> datatype {
   return datatype
}

Instance

import Cocoa

func sitename() -> String {
    return "php中文网"
}
print(sitename())

Hasil output pelaksanaan program di atas ialah:

php中文网

Tuple as function return value

Jenis nilai pulangan fungsi boleh berupa rentetan, integer, titik terapung, dsb.

Tuple adalah serupa dengan tatasusunan. Perbezaannya ialah elemen dalam tuple boleh daripada sebarang jenis dan menggunakan kurungan.

Anda boleh menggunakan jenis tupel untuk mengembalikan berbilang nilai daripada fungsi sebagai nilai komposit.

Dalam contoh berikut, fungsi bernama minMax(_:) ditakrifkan, yang digunakan untuk mencari nilai minimum dan maksimum dalam tatasusunan Int. Fungsi

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(_:) mengembalikan tuple yang mengandungi dua nilai Int, berlabel min dan maks supaya ia boleh diakses dengan nama apabila menanyakan nilai pulangan fungsi.

Output pelaksanaan atur cara di atas ialah:

最小值为 -6 ,最大值为 109

Jika anda tidak pasti bahawa tupel yang dikembalikan mestilah tidak nil, maka anda boleh mengembalikan jenis tupel pilihan.

Anda boleh menentukan tuple pilihan dengan meletakkan tanda soal selepas kurungan penutup jenis tupel, seperti (Int, Int) atau (String, Int, Bool)?

Perhatikan bahawa
jenis tuple pilihan seperti (Int, Int)? berbeza daripada tuple yang mengandungi jenis pilihan seperti (Int?, Int?) Untuk jenis tuple pilihan, keseluruhan tuple adalah pilihan, dan Bukan setiap nilai elemen dalam tupel itu.

Fungsi minMax(_:) sebelumnya mengembalikan tuple yang mengandungi dua nilai Int. Tetapi fungsi itu tidak melakukan sebarang semakan keselamatan pada tatasusunan yang diluluskan Jika argumen array ialah tatasusunan kosong, minMax(_:) seperti yang ditakrifkan di atas akan mencetuskan ralat masa jalan apabila cuba mengakses array[0].

Untuk menangani masalah "tatasusunan kosong" ini dengan selamat, tulis semula fungsi minMax(_:) untuk menggunakan jenis pulangan tuple pilihan dan kembalikan nil apabila tatasusunan kosong:

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)")
}

Output pelaksanaan daripada program di atas ialah:

最小值为 -6,组大值为 109

Tiada fungsi nilai pulangan

Berikut ialah satu lagi versi fungsi php(_:) Fungsi ini menerima URL laman web rasmi laman web Cina parameter, Jenis nilai pulangan tidak ditentukan dan nilai String dikeluarkan secara langsung dan bukannya mengembalikannya:

import Cocoa

func php(site: String) {
    print("php中文网官网:\(site)")
}
php("http://www.php.cn")

Hasil output pelaksanaan program di atas ialah:

php中文网官网:http://www.php.cn

Nama parameter fungsi

Parameter fungsi mempunyai nama parameter luaran dan nama parameter setempat.

Nama parameter tempatan

Nama parameter tempatan digunakan secara dalaman dalam pelaksanaan fungsi.

func sample(number: Int) {
   println(number)
}

Dalam contoh di atas, nombor ialah nama parameter setempat dan hanya boleh digunakan dalam badan fungsi.

import Cocoa

func sample(number: Int) {
   print(number)
}
sample(1)
sample(2)
sample(3)

Hasil output pelaksanaan program di atas ialah:

1
2
3

Nama parameter luaran

Anda boleh menentukan nama parameter luaran sebelum nama parameter tempatan, dipisahkan dengan ruang di tengah , nama parameter luaran ialah Untuk parameter yang dihantar ke fungsi apabila ia dipanggil.

Seperti berikut anda boleh mentakrifkan dua nama parameter fungsi berikut dan memanggilnya:

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)

Hasil output pelaksanaan program di atas ialah:

125

Nota
Jika anda Jika nama parameter luaran diberikan, nama parameter luaran mesti digunakan apabila fungsi dipanggil.


Parameter variadik

Parameter variadik boleh menerima sifar atau lebih nilai. Apabila memanggil fungsi, anda boleh menggunakan parameter pembolehubah untuk menentukan parameter fungsi, dan nombornya tidak ditentukan.

Parameter pembolehubah ditakrifkan dengan menambah (...) selepas nama jenis pembolehubah.

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")

Hasil output pelaksanaan program di atas ialah:

4
3
5
4.5
3.1
5.6
Google
Baidu
php

Parameter pemalar, pembolehubah dan I/O

Secara amnya, parameter yang ditakrifkan dalam fungsi ialah parameter malar secara lalai, iaitu, anda hanya boleh bertanya dan menggunakan parameter ini dan anda tidak boleh menukar nilainya.

Jika anda ingin mengisytiharkan parameter pembolehubah, anda boleh menambah var di hadapan, supaya nilai parameter boleh ditukar.

Contohnya:

func  getName(var id:String).........

Pada masa ini, nilai id boleh ditukar dalam fungsi.

Secara amnya, hantaran parameter lalai dipanggil mengikut nilai, bukan dengan rujukan. Oleh itu, parameter yang diluluskan diubah dalam fungsi, dan ia tidak menjejaskan parameter asal. Apa yang diluluskan hanyalah salinan parameter ini.

Parameter pembolehubah, seperti yang dinyatakan di atas, hanya boleh ditukar dalam badan fungsi. Jika anda mahu fungsi mengubah suai nilai parameter, dan anda mahu pengubahsuaian ini berterusan selepas fungsi dipanggil, maka anda harus menentukan parameter sebagai Parameter Masuk-Keluar.

Apabila mentakrifkan parameter input dan output, tambah kata kunci inout sebelum definisi parameter. Parameter input dan output mempunyai nilai yang dihantar ke dalam fungsi, nilai ini diubah suai oleh fungsi, dan kemudian dikeluarkan daripada fungsi, menggantikan nilai asal.

Contoh

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)")

Hasil output pelaksanaan program di atas ialah:

x = 0 ;y = 100
x = 0 ;y = 100
<pParameter yang dihantar pada masa ini ialah salinan nilai asal, jadi fungsi ini tidak akan menukar kedua-duanya nilai. < p="">

Kaedah pengubahsuaian adalah menggunakan kata kunci 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)")

Hasil keluaran pelaksanaan program di atas ialah:

x = 0 ;y = 100
x = 100 ;y = 0

Jenis dan penggunaan fungsi

Setiap fungsi mempunyai jenis fungsi tertentu, yang terdiri daripada jenis parameter fungsi dan jenis pulangan. Contoh

func inputs(no1: Int, no2: Int) -> Int {
   return no1/no2
}

adalah seperti berikut:

import Cocoa

func inputs(no1: Int, no2: Int) -> Int {
    return no1/no2
}
print(inputs(20,no2:10))
print(inputs(36,no2:6))

Output pelaksanaan program di atas ialah:

2
6

Fungsi di atas mentakrifkan dua jenis parameter Int, dan nilai pulangan juga daripada jenis Int.

Seterusnya mari kita lihat fungsi berikut Fungsi ini mentakrifkan parameter sebagai Jenis String dan nilai pulangan sebagai Jenis String. Fungsi

Func inputstr(name: String) -> String {
   return name
}

juga boleh mentakrifkan sebarang parameter dan jenis, seperti yang ditunjukkan di bawah:

import Cocoa

func inputstr() {
   print("php中文网")
   print("www.php.cn")
}
inputstr()

Hasil output pelaksanaan program di atas ialah:

php中文网
www.php.cn

Gunakan fungsi taip

Dalam Swift, anda bekerja dengan jenis fungsi sama seperti jenis lain. Sebagai contoh, anda boleh menentukan pemalar atau pembolehubah bagi fungsi jenis dan tetapkan fungsi yang sesuai kepadanya:

var addition: (Int, Int) -> Int = sum

Penghuraian:

" Tentukan pembolehubah dipanggil addition dengan parameter Nilai pulangan jenis semuanya Int, dan biarkan pembolehubah baharu ini menunjuk ke fungsi sum".

sum dan addition mempunyai jenis yang sama, jadi operasi di atas adalah sah.

Sekarang, anda boleh menggunakan penambahan untuk memanggil fungsi yang ditetapkan:

import Cocoa

func sum(a: Int, b: Int) -> Int {
   return a + b
}
var addition: (Int, Int) -> Int = sum
print("输出结果: \(addition(40, 89))")

Hasil keluaran pelaksanaan program di atas ialah:

输出结果: 129

Jenis fungsi digunakan sebagai jenis parameter, Jenis fungsi sebagai jenis pulangan

Kita boleh menghantar fungsi sebagai parameter kepada parameter lain:

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)

Hasil output pelaksanaan program di atas ialah:

输出结果: 129
输出结果: 30

Fungsi bersarang

Fungsi bersarang merujuk kepada mentakrifkan fungsi baharu dalam fungsi, dan fungsi luaran boleh memanggil fungsi yang ditakrifkan dalam fungsi.

Contohnya adalah seperti berikut:

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())

Hasil keluaran pelaksanaan program di atas ialah:

-30