<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-overloading](https://www.programiz.com/swift-programming/function-overloading) #### 在本文中,您將了解函數重載,何時需要函數重載以及如何重載示例。 具有相同名稱但不同自變量的兩個或多個[函數](/swift-programming/functions "Swift functions")被稱為重載函數。 ## 為什么需要函數重載? 想象您正在開發一個射擊游戲,玩家可以使用刀,刃和槍來攻擊敵人。 針對攻擊函數的解決方案可能是將操作定義為以下函數: ```swift func attack() { //.. print("Attacking with Knife") } func attack() { //.. print("Attacking with Blade") } func attack() { //.. print("Attacking with Gun") } ``` 但是,當您嘗試運行上述程序時,由于先前在中聲明了`attack()`而在 Swift 中會出現編譯時錯誤。 但是,另一種解決方案可能是為特定功能定義不同的函數名稱,例如: ```swift struct Knife { } struct Gun { } struct Blade { } func attackUsingKnife(weapon:Knife) { //.. print("Attacking with Knife") } func attackUsingBlade(weapon:Blade) { //.. print("Attacking with Blade") } func attackUsingGun(weapon:Gun) { //.. print("Attacking with Gun") } ``` 如果您不知道結構是什么,請不要擔心。 現在,只需將其視為可以在編程中創建物理對象的對象,那么您就可以創建刀,槍和刀片。 如果您想了解更多信息,請參見 [Swift Struct](http://test.com) 。 如果沒有,我們將在后面的章節中再次討論。 此解決方案的唯一問題是,您需要記住函數名稱以調用特定的攻擊操作。 同樣,隨著等級的提高,玩家可能具有使用炸彈,手榴彈,散彈槍等進行攻擊的其他功能。 用不同的名稱創建函數很耗時,并且增加了記住函數名稱以調用它的開銷。 總而言之,這不是直觀的。 如果可以為每種武器使用相同的名稱但實現不同的功能來創建不同的函數,那就更好了。 這樣,記住一個函數名稱就足夠了,您不必擔心其他武器的函數名稱。 * * * ## 什么是函數重載? 我們剛剛描述的過程稱為函數重載。 根據定義,創建兩個或兩個以上具有相同名稱但傳遞的參數數量或類型不同的函數的過程稱為函數重載。 讓我們在下面的示例中看到: ## 示例 1:函數重載 ```swift struct Knife { } struct Gun { } struct Blade { } func attack(with weapon:Knife) { print("Attacking with Knife") } func attack(with weapon:Gun) { print("Attacking with Gun") } func attack(with weapon:Blade) { print("Attacking with Blade") } attack(with: Gun()) attack(with: Blade()) attack(with: Knife()) ``` 當您運行上述程序時,輸出將是: ```swift Attacking with Gun Attacking with Blade Attacking with Knife ``` 在上面的程序中,我們創建了三個具有相同名稱`attack`的不同函數。 但是,它接受不同的參數類型。 這樣,記住`attack`名稱即可調用該函數。 * 調用`attack(with: Gun())`觸發函數`func attack(with weapon:Gun)`內部的語句。 * 調用`attack(with: Blade())`觸發函數`func attack(with weapon:Blade)`內部的語句。 * 函數`func attack(with weapon:Knife)`內的調用`attack(with: Knife())`語句。 * * * ## 示例 2:基于不同參數類型的函數重載 ```swift func output(x:Int) { print("The int value is \(x)") } func output(x:String) { print("The string value is \(x)") } output(x: 2) output(x: "Swift") ``` 運行該程序時,輸出為: ```swift The int value is 2 The string value is Swift ``` 在上面的程序中,我們有兩個名稱相同的函數`output()`和相同數量的參數。 但是,第一個`output()`函數將整數作為參數,第二個`output()`函數將`String`作為參數。 與示例 1 類似, * 對`output(x: 2)`的調用會觸發函數`func output(x:Int)`中的語句,并且 * 調用`output(x: "Swift")`會觸發函數`func output(x:String)`中的語句。 ## 示例 3:基于不同參數數量的函數重載 ```swift func output() { print("Good Morning!") } func output(text:String) { print(text) } func output(text:String, num:Int) { print("\(text)\(num)!") } output() output(text: "Good Evening!") output(text1: "Good N", num: 8) ``` 運行該程序時,輸出為: ```swift Good Morning! Good Evening! Good Night! ``` 在上面的程序中,函數`output()`已基于參數數量重載。 第一個`output()`不帶參數,第二個`output()`帶一個參數:`String`,第三個`output()`帶兩個參數:`String`和`Int`。 讓我們嘗試通過更改參數名稱但使參數標簽與以下內容相同來重載: * * * ## 示例 4:使用相同參數標簽的函數重載 ```swift func output(value text:String) { print(text) } func output(value num:Int) { print(num) } output(value: 2) output(value: "Hello") ``` 運行該程序時,輸出為: ```swift 2 Hello ``` 如您所見,在上面的程序中,可以對重載函數使用相同的參數標簽。 但是,根據重載的要求,您必須具有不同數量的參數或不同類型的參數。
                  <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>

                              哎呀哎呀视频在线观看