<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Swift 函數參數和返回值 > 原文: [https://www.programiz.com/swift-programming/function-parameter-return-values](https://www.programiz.com/swift-programming/function-parameter-return-values) #### 在本文中,您將學習不同的用戶定義函數,這些函數將通過示例獲取不同類型的輸入并返回輸出。 在上一篇文章 [Swift Functions](/swift-programming/functions "Swift Functions") 中,我們了解了函數。 現在,我們將探討在 Swift 中創建函數的不同方式和類型,即在函數中處理輸入和輸出。 ## 沒有參數且沒有返回值的函數 這些類型的函數不接受任何輸入和返回值。 ```swift func funcname() { //statements } OR func funcname() -> () { //statements } OR func funcname() -> Void { //statements } ``` 以上所有語法對于創建不帶參數且不返回值的函數都是有效的。 上面的語法`func funcname() -> ()`也等同于`func funcname() -> Void`,因為`Void`只是`()`的類型別名。 您可以訪問 [Swift Typealias](/swift-programming/typealias "Swift typealias") 了解更多信息。 ### 示例 1:沒有傳遞參數,也沒有返回值 ```swift func greetUser() { print("Good Morning!") } greetUser() ``` 當您運行上述程序時,輸出將是: ```swift Good Morning! ``` * * * ## 沒有參數但返回值的函數 這些類型的函數不接受任何輸入參數,而是返回一個值。 要添加返回類型,您需要添加箭頭(`->`)和返回類型。 ```swift func funcname() -> ReturnType { //statements return value } ``` ### 示例 2:沒有傳遞參數但返回值 ```swift func greetUser() -> String { return "Good Morning!" } let msg = greetUser() print(msg) ``` 運行該程序時,輸出為: ```swift Good Morning! ``` 在上面的程序中,您將返回類型定義為`String`。 現在,該語句必須從函數內部的語句中返回一個字符串,否則您將收到錯誤。 `return`關鍵字將程序的控制權從函數主體轉移到函數調用。 如果需要從函數返回值,請在`return`關鍵字后添加值。 `return "Good Morning!"`語句從該函數返回`String`類型的值。 請注意,返回類型和值必須匹配。 您還可以將返回值分配給變量或常量。`let msg =`將返回值分配給常數`msg`。 因此,語句`print(msg)`輸出`"Good Morning!"`。 如果您想忽略該值,則可以簡單地將`_`用作`let _ =`。 * * * ## 具有參數但沒有返回值的函數 參數用于在函數中輸入。 該參數包含一個參數名稱和類型,后跟一個冒號(`:`)。 這些類型的函數采用輸入參數,但不返回值。 ```swift func funcname(parameterName:Type) { //statements } ``` ### 示例 3:傳遞參數但沒有返回值 ```swift func greetUser(msg:String) { print(msg) } greetUser(msg: "Good Morning!") ``` 運行該程序時,輸出為: ```swift Good Morning! ``` 在上述程序中,該函數接受類型為`String`的單個參數。 該參數只能在函數內部使用。`msg`是參數的名稱。 您可以通過向函數傳遞參數名稱為`greetUser(msg: "Good Morning!")`的字符串值來調用該函數。`msg`參數名稱僅在函數`greetUser()`內部可見。 因此,語句`print(msg)`輸出`"Good Morning!"`。 * * * ## 具有參數和返回值的函數 這些類型的函數使用參數,還返回值。 ```swift func funcname(parameterName:Type) -> ReturnType { //statements } ``` ### 示例 4:傳遞參數并返回值 ```swift func greetUser(name:String) -> String { return "Good Morning! " + name } let msg = greetUser(name: "Jack") print(msg) ``` 運行該程序時,輸出為: ```swift Good Morning! Jack ``` 在上述程序中,該函數接受`String`類型的單個參數,并且還返回字符串值`Good Morning! Jack`。 * * * ## 具有多個參數和多個返回值的函數 這些類型的函數采用以逗號分隔的多個參數,并且還返回多個值。 您可以使用元組在 Swift 中返回多個值。 有關更多信息,請參見 *Swift 元組*。 ```swift func funcname(parameterName:Type, parameterName2:Type ,...) -> (ReturnType, ReturnType...) { //statements } ``` ### 示例 5:傳遞了多個參數和多個返回值 ```swift func greetUser(name:String, age:Int) -> (String, Int) { let msg = "Good Morning!" + name var userage = age if age < 0 { userage = 0 } return (msg, userage) } let msg = greetUser(name: "Jack", age: -2) print(msg.0) print("You have \(msg.1) coins left") ``` 運行該程序時,輸出為: ```swift Good Morning!Jack You have 0 coins left ``` 在上述程序中,函數`greetUser()`接受類型為`String`和`Int`的多個參數。 該函數還以`String`和`Int`類型的元組返回多個值。 要訪問每個返回值,我們使用索引位置 0,1… 在這里,我們使用`msg.0`訪問`Good Morning!Jack`和`msg.1`訪問 **0**。 有時使用索引位置可能不直觀且不可讀。 我們可以通過給名稱指定返回值來優雅地解決此問題。 上面的程序也可以如下重寫。 ### 示例 6:具有名稱的多個返回值 ```swift func greetUser(name:String, coins:Int) -> (name:String, coins:Int) { let msg = "Good Morning!" + name var userCoins = coins if coins < 0 { userCoins = 0 } return (msg, userCoins) } let msg = greetUser(name: "Jack",coins: -2) print(msg.name) print("You have \(msg.coins) coins left") ``` 在此程序中,返回類型為元組,其中包含具有該類型的變量名稱。 這樣的主要優點是您可以使用變量名稱`msg.name`和`msg.coins`而不是訪問結果`msg.0`和`msg.1`。 * * * ## 具有參數標簽的函數 定義接受輸入的函數時,可以在參數名稱的幫助下定義輸入名稱。 但是,還有另一種名稱可以與參數名稱一起使用,稱為參數標簽。 參數標簽的使用允許以表達方式,類似于句子的方式調用函數,同時仍提供可讀且意圖明確的函數主體。 每個函數參數都具有參數標簽和參數名稱。 默認情況下,參數使用其參數名稱作為其參數標簽。 但是,如果您顯式定義參數名稱,則在調用函數時會使用參數標簽。 帶參數標簽的函數的語法為 ```swift func funcname(argumentLabel parameterName:Type)-> Return Type { //statements } ``` 讓我們在下面的示例中看到它。 ### 示例 7:不帶參數標簽的函數 ```swift func sum(a:Int, b:Int) -> Int { return a + b } let result = sum(a: 2, b: 3) print("The sum is \(result)") ``` 運行該程序時,輸出為: ```swift The sum is 5 ``` 在上面的示例中,我們沒有指定參數標簽,因此在調用函數時它將默認參數名稱`a`和`b`作為參數標簽。 您可能會注意到,調用函數時,函數調用不是表達性/句子。 如果您可以將函數調用為: ```swift let result = sum(of: 2, and: 3) ``` 現在,將函數更改為: ### 示例 8:具有更好的函數調用但不作為參數名稱的函數 ```swift func sum(of:Int, and:Int) -> Int { return of + and } let result = sum(of: 2, and: 3) print("The sum is \(result)") ``` 現在,方法調用是可表達的。 但是,現在我們必須在`return of + and`中使用參數名稱`of`和`and`來找到兩個數字的和。 現在,這使得函數體不可讀。 在函數體內使用`a`和`b`代替`of`和`and`。 為此,我們必須將參數標簽明確定義為: ### 示例 9:帶有參數標簽的函數 ```swift func sum(of a :Int, and b:Int) -> Int { return a + b } let result = sum(of: 2, and: 3) print("The sum is \(result)") ``` 在上面的程序中,該函數接受類型為`Int`的兩個參數。 函數調用使用`of`和`and`的參數標簽,將函數稱為`sum(of: 2, and: 3)`而不是`sum(a: 2, b: 3)`有意義。 另外,函數體使用參數名稱`a`和`b`代替`of`和`and`。 您也可以通過在參數名稱之前寫入`_`來省略參數標簽。 ```swift func sum(_ a :Int, _ b:Int) -> Int { return a + b } let result = sum(2, 3) print("The sum is \(result)") ``` * * * ## 具有默認參數值的函數 您可以為函數中的任何參數提供默認值,方法是在該參數的類型之后為該參數分配一個值。 提供默認參數可讓您在調用函數時忽略該參數。 如果在調用函數時未將值傳遞給參數,則使用其默認值。 但是,如果在調用時將值顯式傳遞給參數,則使用指定的值。 ```swift func funcname(parameterName:Type = value) -> Return Type { //statements } ``` ### 示例 10:具有默認參數值的函數 ```swift func sum(of a :Int = 7, and b:Int = 8) -> Int { return a + b } let result1 = sum(of: 2, and: 3) print("The sum is \(result1)") let result2 = sum(of: 2) print("The sum is \(result2)") let result3 = sum(and: 2) print("The sum is \(result3)") let result4 = sum() print("The sum is \(result4)") ``` 運行該程序時,輸出為: ```swift The sum is 5 The sum is 10 The sum is 9 The sum is 15 ``` 在上述程序中,函數`sum(of a :Int = 7 , and b:Int = 8) -> Int`接受兩個類型為`Int`的參數,但也指定了參數`a = 7`和`b = 8.`的默認值 如果在函數調用中以`sum(of: 2, and: 3)`的形式將值作為參數傳遞,則將使用 **2** 和 **3** 代替參數默認值。 但是,如果未將參數值傳遞為`sum()`,則將默認值 **7** 和 **8** 用作參數值。 ## 具有可變參數的函數 可變參數可以接受零個或多個特定類型的值。 您可以通過在參數的類型名稱后插入三個句點字符(...)來指定可變參數。 當需要在調用函數時將各種數量的輸入值傳遞給參數時,通常使用可變參數。 例如,數字列表,字母列表等。 具有可變參數的函數的語法為: ```swift func funcname(parameterName:Type...) -> Return Type { //statements } ``` ### 示例 11:具有可變參數的函數 ```swift func sum(of numbers:Int...) { var result = 0 for num in numbers { result += num } print("The sum of numbers is \(result)") } sum(of: 1, 2, 3, 4, 5, 6, 7, 8) ``` 在上述程序中,函數`sum(of numbers:Int...)`接受類型為`Int`的可變參數。 可變參數可以接受多個以逗號分隔的值`sum(of: 1, 2, 3, 4, 5, 6, 7, 8)`。 作為可變參數傳遞的值 **1、2、3、4、5、6、7、8** 在函數體內可以作為`Int`類型的數組使用。 因此,我們可以在`for num in numbers`值中應用`for-in`循環。 運行該程序時,輸出為: ```swift The sum of numbers is 36 ``` 注意:內置`print()`函數的 Swift 也接受`Any`類型的可變參數。 `Any`代表 Swift 中的任何數據類型,例如`Int`,`Float`,`Double`,`String`等。 * * * ## 具有輸入輸出參數的函數 定義函數參數時,無法在體內修改函數參數。 因此,它們默認為常量。 讓我們在示例中看一下: ```swift func process(name:String) { if name == ""{ name = "guest" } } ``` 上面的程序會導致編譯時錯誤,因為您無法更改參數的值。 如果要讓函數修改參數的值,則需要將參數定義為輸入輸出參數。 您可以通過將`inout`關鍵字放在參數類型的前面來編寫輸入/輸出參數。 在后臺,一個`in-out`參數具有一個值,該值傳遞到函數中,由函數修改,然后從函數中傳遞回以替換原始值。 因此,函數調用中傳遞的值不能為常數。 您必須將其聲明為變量。 具有`inout`參數的函數的語法為: ```swift func funcname(parameterName:inout Type) -> Return Type { //statements } ``` ### 示例 12:帶有`inout`參數的函數 ```swift func process(name:inout String) { if name == ""{ name = "guest" } } var userName = "" process(name: &userName) print(userName) ``` 運行該程序時,輸出為: ```swift guest ``` 在上面的程序中,我們聲明了一個函數,該函數接受`inout`參數`name`,以便可以在函數體內更改/更改參數。 在將參數傳遞給`in-out`參數時,必須在變量名稱之前直接使用`ampersand (&)`符號,以便可以通過函數對其進行修改。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看