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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Swift 擴展 擴展就是向一個已有的類、結構體或枚舉類型添加新功能。 擴展可以對一個類型添加新的功能,但是不能重寫已有的功能。 Swift 中的擴展可以: * 添加計算型屬性和計算型靜態屬性 * 定義實例方法和類型方法 * 提供新的構造器 * 定義下標 * 定義和使用新的嵌套類型 * 使一個已有類型符合某個協議 ### 語法 擴展聲明使用關鍵字 **extension**: ``` extension SomeType { // 加到SomeType的新功能寫到這里 } ``` 一個擴展可以擴展一個已有類型,使其能夠適配一個或多個協議,語法格式如下: ``` extension SomeType: SomeProtocol, AnotherProctocol { // 協議實現寫到這里 } ``` ## 計算型屬性 擴展可以向已有類型添加計算型實例屬性和計算型類型屬性。 ### 實例 下面的例子向 Int 類型添加了 5 個計算型實例屬性并擴展其功能: ``` extension Int { var add: Int {return self + 100 } var sub: Int { return self - 10 } var mul: Int { return self * 10 } var div: Int { return self / 5 } } let addition = 3.add print("加法運算后的值:\(addition)") let subtraction = 120.sub print("減法運算后的值:\(subtraction)") let multiplication = 39.mul print("乘法運算后的值:\(multiplication)") let division = 55.div print("除法運算后的值: \(division)") let mix = 30.add + 34.sub print("混合運算結果:\(mix)") ``` 以上程序執行輸出結果為: ``` 加法運算后的值:103 減法運算后的值:110 乘法運算后的值:390 除法運算后的值: 11 混合運算結果:154 ``` ## 構造器 擴展可以向已有類型添加新的構造器。 這可以讓你擴展其它類型,將你自己的定制類型作為構造器參數,或者提供該類型的原始實現中沒有包含的額外初始化選項。 擴展可以向類中添加新的便利構造器 init(),但是它們不能向類中添加新的指定構造器或析構函數 deinit() 。 ``` struct sum { var num1 = 100, num2 = 200 } struct diff { var no1 = 200, no2 = 100 } struct mult { var a = sum() var b = diff() } let calc = mult() print ("mult 模塊內 \(calc.a.num1, calc.a.num2)") print("mult 模塊內 \(calc.b.no1, calc.b.no2)") let memcalc = mult(a: sum(num1: 300, num2: 500),b: diff(no1: 300, no2: 100)) print("mult 模塊內 \(memcalc.a.num1, memcalc.a.num2)") print("mult 模塊內 \(memcalc.b.no1, memcalc.b.no2)") extension mult { init(x: sum, y: diff) { _ = x.num1 + x.num2 _ = y.no1 + y.no2 } } let a = sum(num1: 100, num2: 200) print("Sum 模塊內:\( a.num1, a.num2)") let b = diff(no1: 200, no2: 100) print("Diff 模塊內: \(b.no1, b.no2)") ``` 以上程序執行輸出結果為: ``` mult 模塊內 (100, 200) mult 模塊內 (200, 100) mult 模塊內 (300, 500) mult 模塊內 (300, 100) Sum 模塊內:(100, 200) Diff 模塊內: (200, 100) ``` ## 方法 擴展可以向已有類型添加新的實例方法和類型方法。 下面的例子向Int類型添加一個名為 topics 的新實例方法: ``` extension Int { func topics(summation: () -> ()) { for _ in 0..<self { summation() } } } 4.topics({ print("擴展模塊內") }) 3.topics({ print("內型轉換模塊內") }) ``` 以上程序執行輸出結果為: ``` 擴展模塊內 擴展模塊內 擴展模塊內 擴展模塊內 內型轉換模塊內 內型轉換模塊內 內型轉換模塊內 ``` 這個`topics`方法使用了一個`() -&gt; ()`類型的單參數,表明函數沒有參數而且沒有返回值。 定義該擴展之后,你就可以對任意整數調用 `topics` 方法,實現的功能則是多次執行某任務: ## 可變實例方法 通過擴展添加的實例方法也可以修改該實例本身。 結構體和枚舉類型中修改self或其屬性的方法必須將該實例方法標注為mutating,正如來自原始實現的修改方法一樣。 ### 實例 下面的例子向 Swift 的 Double 類型添加了一個新的名為 square 的修改方法,來實現一個原始值的平方計算: ``` extension Double { mutating func square() { let pi = 3.1415 self = pi * self * self } } var Trial1 = 3.3 Trial1.square() print("圓的面積為: \(Trial1)") var Trial2 = 5.8 Trial2.square() print("圓的面積為: \(Trial2)") var Trial3 = 120.3 Trial3.square() print("圓的面積為: \(Trial3)") ``` 以上程序執行輸出結果為: ``` 圓的面積為: 34.210935 圓的面積為: 105.68006 圓的面積為: 45464.070735 ``` ## 下標 擴展可以向一個已有類型添加新下標。 ### 實例 以下例子向 Swift 內建類型Int添加了一個整型下標。該下標[n]返回十進制數字 ``` extension Int { subscript(var multtable: Int) -> Int { var no1 = 1 while multtable > 0 { no1 *= 10 --multtable } return (self / no1) % 10 } } print(12[0]) print(7869[1]) print(786543[2]) ``` 以上程序執行輸出結果為: ``` 2 6 5 ``` ## 嵌套類型 擴展可以向已有的類、結構體和枚舉添加新的嵌套類型: ``` extension Int { enum calc { case add case sub case mult case div case anything } var print: calc { switch self { case 0: return .add case 1: return .sub case 2: return .mult case 3: return .div default: return .anything } } } func result(numb: [Int]) { for i in numb { switch i.print { case .add: print(" 10 ") case .sub: print(" 20 ") case .mult: print(" 30 ") case .div: print(" 40 ") default: print(" 50 ") } } } result([0, 1, 2, 3, 4, 7]) ``` 以上程序執行輸出結果為: ``` 10 20 30 40 50 50 ```
                  <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>

                              哎呀哎呀视频在线观看