當前位置:
首頁 > 知識 > Swift 函數

Swift 函數

Swift 函數用來完成特定任務的獨立的代碼塊。

Swift使用一個統一的語法來表示簡單的C語言風格的函數到複雜的Objective-C語言風格的方法。

  • 函數聲明: 告訴編譯器函數的名字,返回類型及參數。

  • 函數定義: 提供了函數的實體。

Swift 函數包含了參數類型及返回值類型:


Swift 函數

函數定義

Swift 定義函數使用關鍵字 func

定義函數的時候,可以指定一個或多個輸入參數和一個返回值類型。

每個函數都有一個函數名來描述它的功能。通過函數名以及對應類型的參數值來調用這個函數。函數的參數傳遞的順序必須與參數列表相同。

函數的實參傳遞的順序必須與形參列表相同,-> 後定義函數的返回值類型。

語法

func funcname(形參) -> returntype

實例

以下我們定義了一個函數名為 runoob 的函數,形參的數據類型為 String,返回值也為 String:

import Cocoa

以上程序執行輸出結果為:

www.runoob.com


Swift 函數

函數調用

我們可以通過函數名以及對應類型的參數值來調用函數,函數的參數傳遞的順序必須與參數列表相同。

以下我們定義了一個函數名為 runoob 的函數,形參 site 的數據類型為 String,之後我們調用函數傳遞的實參也必須 String 類型,實參傳入函數體後,將直接返回,返回的數據類型為 String。

import Cocoa

以上程序執行輸出結果為:

www.runoob.com


函數參數

函數可以接受一個或者多個參數,這些參數被包含在函數的括弧之中,以逗號分隔。

以下實例向函數 runoob 傳遞站點名 name 和站點地址 site:

import Cocoa

以上程序執行輸出結果為:

菜鳥教程:www.runoob.com


不帶參數函數

我們可以創建不帶參數的函數。

語法:

func funcname() -> datatype {

實例

import Cocoa

以上程序執行輸出結果為:

菜鳥教程


元組作為函數返回值

函數返回值類型可以是字元串,整型,浮點型等。

元組與數組類似,不同的是,元組中的元素可以是任意類型,使用的是圓括弧。

你可以用元組(tuple)類型讓多個值作為一個複合值從函數中返回。

下面的這個例子中,定義了一個名為minMax(_:)的函數,作用是在一個Int數組中找出最小值與最大值。

import Cocoa

minMax(_:)函數返回一個包含兩個Int值的元組,這些值被標記為min和max,以便查詢函數的返回值時可以通過名字訪問它們。

以上程序執行輸出結果為:

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

如果你不確定返回的元組一定不為nil,那麼你可以返回一個可選的元組類型。

你可以通過在元組類型的右括弧後放置一個問號來定義一個可選元組,例如(Int, Int)?或(String, Int, Bool)?


注意

可選元組類型如(Int, Int)?與元組包含可選類型如(Int?, Int?)是不同的.可選的元組類型,整個元組是可選的,而不只是元組中的每個元素值。

前面的minMax(_:)函數返回了一個包含兩個Int值的元組。但是函數不會對傳入的數組執行任何安全檢查,如果array參數是一個空數組,如上定義的minMax(_:)在試圖訪問array[0]時會觸發一個運行時錯誤。

為了安全地處理這個"空數組"問題,將minMax(_:)函數改寫為使用可選元組返回類型,並且當數組為空時返回nil

import Cocoa

以上程序執行輸出結果為:

最小值為 -6,組大值為 109


Swift 函數

沒有返回值函數

下面是 runoob(_:) 函數的另一個版本,這個函數接收菜鳥教程官網網址參數,沒有指定返回值類型,並直接輸出 String 值,而不是返回它:

import Cocoa

以上程序執行輸出結果為:

菜鳥教程官網:http://www.runoob.com


函數參數名稱

函數參數都有一個外部參數名和一個局部參數名。

局部參數名

局部參數名在函數的實現內部使用。

func sample(number: Int) {

以上實例中 number 為局部參數名,只能在函數體內使用。

import Cocoa

以上程序執行輸出結果為:

1

外部參數名

你可以在局部參數名前指定外部參數名,中間以空格分隔,外部參數名用於在函數調用時傳遞給函數的參數。

如下你可以定義以下兩個函數參數名並調用它:

import Cocoa

以上程序執行輸出結果為:

125

注意

如果你提供了外部參數名,那麼函數在被調用時,必須使用外部參數名。


可變參數

可變參數可以接受零個或多個值。函數調用時,你可以用可變參數來指定函數參數,其數量是不確定的。

可變參數通過在變數類型名後面加入(...)的方式來定義。

import Cocoa

以上程序執行輸出結果為:

4


常量,變數及 I/O 參數

一般默認在函數中定義的參數都是常量參數,也就是這個參數你只可以查詢使用,不能改變它的值。

如果想要聲明一個變數參數,可以在參數定義前加 inout 關鍵字,這樣就可以改變這個參數的值了。

例如:

func getName(_ name: inout String).........

此時這個 name 值可以在函數中改變。

一般默認的參數傳遞都是傳值調用的,而不是傳引用。所以傳入的參數在函數內改變,並不影響原來的那個參數。傳入的只是這個參數的副本。

當傳入的參數作為輸入輸出參數時,需要在參數名前加 & 符,表示這個值可以被函數修改。

實例

import Cocoa

swapTwoInts(_:_:) 函數簡單地交換 a 與 b 的值。該函數先將 a 的值存到一個臨時常量 temporaryA 中,然後將 b 的值賦給 a,最後將 temporaryA 賦值給 b。

需要注意的是,someInt 和 anotherInt 在傳入 swapTwoInts(_:_:) 函數前,都加了 & 的前綴。

以上程序執行輸出結果為:

x 現在的值 5, y 現在的值 1


函數類型及使用

每個函數都有種特定的函數類型,由函數的參數類型和返回類型組成。

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

inputs 函數類型有兩個 Int 型的參數(no1、no2)並返回一個 Int 型的值。

實例如下:

import Cocoa

以上程序執行輸出結果為:

2

以上函數定義了兩個 Int 參數類型,返回值也為 Int 類型。

接下來我們看下如下函數,函數定義了參數為 String 類型,返回值為 String 類型。

func inputstr(name: String) -> String {

函數也可以定義一個沒有參數,也沒有返回值的函數,如下所示:

import Cocoa

以上程序執行輸出結果為:

菜鳥教程

使用函數類型

在 Swift 中,使用函數類型就像使用其他類型一樣。例如,你可以定義一個類型為函數的常量或變數,並將適當的函數賦值給它:

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

解析:

"定義一個叫做 addition 的變數,參數與返回值類型均是 Int ,並讓這個新變數指向 sum 函數"。

sumaddition 有同樣的類型,所以以上操作是合法的。

現在,你可以用 addition 來調用被賦值的函數了:

import Cocoa

以上程序執行輸出結果為:

輸出結果: 129


函數類型作為參數類型、函數類型作為返回類型

我們可以將函數作為參數傳遞給另外一個參數:

import Cocoa

以上程序執行輸出結果為:

輸出結果: 129


函數嵌套

函數嵌套指的是函數內定義一個新的函數,外部的函數可以調用函數內定義的函數。

實例如下:

import Cocoa

以上程序執行輸出結果為:

-30

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

Swift 數組
Swift 閉包
Swift 運算符
Swift 條件語句
Swift 循環

TAG:程序員小新人學習 |

您可能感興趣

iOS swift UISearchBar拿到textfield控制項
Windows 10 RS4將新增Swift Pair功能
Swift for TensorFlow 已在 GitHub 上開源,Tensor 成為 Swift 語言裡面的一等公民
Swift與Fedora
基於Swift 5的編程教學Swift Playgrounds即將推出
Swift 的類
介紹 Fedora 上的 Swift
可以拋棄 Python?Google 開源 Swift for TensorFlow 意味什麼
adidas Originals Swift Run PK推出全新配色
谷歌又開源了:Swift for TensorFlow
Gigi Hadid和Taylor Swift超酷閨蜜裝
Swift 泛型
Swift For TensorFlow開源,敲響了Python的喪鐘?
蘋果編程應用Swift Playgrounds升級到2.0
可以拋棄 Python 了?Google 開源 Swift for TensorFlow 意味著什麼
Taylor Swift又瘦了!
宏碁Swift/Aspire與Spin PC系列產品全線更新
Swift 繼承
Kotlin和Swift語言在Redmonk榜上排名大幅提升
Hermes 愛馬仕 kelly Flat 35CM CK18大象灰 Swift