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