
- Swift 教程
- Swift - 首頁
- Swift - 概述
- Swift - 環境
- Swift - 基本語法
- Swift - 變數
- Swift - 常量
- Swift - 字面量
- Swift - 註釋
- Swift 運算子
- Swift - 運算子
- Swift - 算術運算子
- Swift - 比較運算子
- Swift - 邏輯運算子
- Swift - 賦值運算子
- Swift - 位運算子
- Swift - 其他運算子
- Swift 高階運算子
- Swift - 運算子過載
- Swift - 算術溢位運算子
- Swift - 恆等運算子
- Swift - 範圍運算子
- Swift 資料型別
- Swift - 資料型別
- Swift - 整數
- Swift - 浮點數
- Swift - Double
- Swift - 布林值
- Swift - 字串
- Swift - 字元
- Swift - 類型別名
- Swift - 可選型別
- Swift - 元組
- Swift - 斷言和前提條件
- Swift 控制流
- Swift - 決策制定
- Swift - if 語句
- Swift - if...else if...else 語句
- Swift - if-else 語句
- Swift - 巢狀 if 語句
- Swift - switch 語句
- Swift - 迴圈
- Swift - for in 迴圈
- Swift - while 迴圈
- Swift - repeat...while 迴圈
- Swift - continue 語句
- Swift - break 語句
- Swift - 穿透語句
- Swift 集合
- Swift - 陣列
- Swift - 集合
- Swift - 字典
- Swift 函式
- Swift - 函式
- Swift - 巢狀函式
- Swift - 函式過載
- Swift - 遞迴
- Swift - 高階函式
- Swift 閉包
- Swift - 閉包
- Swift-逃逸和非逃逸閉包
- Swift - 自動閉包
- Swift 面向物件程式設計
- Swift - 列舉
- Swift - 結構體
- Swift - 類
- Swift - 屬性
- Swift - 方法
- Swift - 下標
- Swift - 繼承
- Swift-重寫
- Swift - 初始化
- Swift - 析構
- Swift 高階
- Swift - ARC 概述
- Swift - 可選鏈
- Swift - 錯誤處理
- Swift - 併發
- Swift - 型別轉換
- Swift - 巢狀型別
- Swift - 擴充套件
- Swift - 協議
- Swift - 泛型
- Swift - 訪問控制
- Swift - 函式與方法
- Swift - SwiftyJSON
- Swift - 單例類
- Swift 隨機數
- Swift 不透明和裝箱型別
- Swift 有用資源
- Swift - 線上編譯
- Swift - 快速指南
- Swift - 有用資源
- Swift - 討論
Swift - 擴充套件
什麼是 Swift 中的擴充套件?
Swift 提供了一個稱為擴充套件的特殊功能。擴充套件用於在現有的類、結構體、列舉或協議型別中新增新的功能,而無需覆蓋或修改現有的程式碼。當我們想要擴充套件無法修改的型別的功能(例如第三方庫等)時,此功能非常有用。擴充套件是對型別的靜態新增,而不是動態的。此外,它們不能新增具有預設值的儲存屬性。
以下是擴充套件提供的功能:
新增計算屬性和計算型別屬性
定義例項方法和型別方法
提供新的初始化器
定義下標
定義和使用新的巢狀型別
使現有型別符合協議
在 Swift 中定義擴充套件
擴充套件是藉助 **extension** 關鍵字宣告的。
語法
以下是擴充套件的語法:
extension SomeType { // Adding new functionality }
現有型別也可以透過擴充套件新增,使其成為協議標準,其語法類似於類或結構體。
extension SomeType: SomeProtocol, AnotherProtocol { // Describe protocol requirements }
帶有計算屬性的擴充套件
計算“例項”和“型別”屬性也可以透過擴充套件進行擴充套件。計算屬性是指不儲存值的屬性,而是提供 getter 和 setter 來檢索和設定其他屬性和值。
示例
Swift 程式演示如何使用擴充套件在計算屬性中新增新功能。
// Adding new functionality to the computed property using an extension 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 is \(addition)") let subtraction = 120.sub print("Subtraction is \(subtraction)") let multiplication = 39.mul print("Multiplication is \(multiplication)") let division = 55.div print("Division is \(division)") let mix = 30.add + 34.sub print("Mixed Type is \(mix)")
輸出
它將產生以下輸出:
Addition is 103 Subtraction is 110 Multiplication is 390 Division is 11 Mixed Type is 154
帶有初始化器的擴充套件
Swift 提供了使用擴充套件向現有型別新增新初始化器的靈活性。使用者可以新增他們自己的自定義型別來擴充套件已定義的型別,並且還可以提供額外的初始化選項。擴充套件僅支援 init()。deinit() 不受擴充套件支援。
示例
Swift 程式演示如何使用擴充套件在初始化器中新增新功能。
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 ("Inside mult block \(calc.a.num1, calc.a.num2)") print("Inside mult block \(calc.b.no1, calc.b.no2)") let memcalc = mult(a: sum(num1: 300, num2: 500),b: diff(no1: 300, no2: 100)) print("Inside mult block \(memcalc.a.num1, memcalc.a.num2)") print("Inside mult block \(memcalc.b.no1, memcalc.b.no2)") extension mult { init(x: sum, y: diff) { let X = x.num1 + x.num2 let Y = y.no1 + y.no2 } } let a = sum(num1: 100, num2: 200) print("Inside Sum Block:\( a.num1, a.num2)") let b = diff(no1: 200, no2: 100) print("Inside Diff Block: \(b.no1, b.no2)")
輸出
它將產生以下輸出:
Inside mult block (100, 200) Inside mult block (200, 100) Inside mult block (300, 500) Inside mult block (300, 100) Inside Sum Block:(100, 200) Inside Diff Block: (200, 100)
帶有方法的擴充套件
可以使用擴充套件向子類進一步新增新的例項方法和型別方法。
示例
Swift 程式演示如何使用擴充套件在方法中新增新功能。
extension Int { func topics(summation: () -> ()) { for _ in 0..<self { summation() } } } 4.topics({ print("Inside Extensions Block") }) 3.topics({ print("Inside Type Casting Block") })
輸出
它將產生以下輸出:
Inside Extensions Block Inside Extensions Block Inside Extensions Block Inside Extensions Block Inside Type Casting Block Inside Type Casting Block Inside Type Casting Block
帶有可變例項方法的擴充套件
我們還可以使用擴充套件向結構體和列舉的可變例項方法中新增新功能。
示例
Swift 程式演示如何使用擴充套件在可變方法中新增新功能。
extension Double { mutating func square() { let pi = 3.1415 self = pi * self * self } } var Trial1 = 3.3 Trial1.square() print("Area of circle is: \(Trial1)") var Trial2 = 5.8 Trial2.square() print("Area of circle is: \(Trial2)") var Trial3 = 120.3 Trial3.square() print("Area of circle is: \(Trial3)")
輸出
它將產生以下輸出:
Area of circle is: 34.210935 Area of circle is: 105.68006 Area of circle is: 45464.070735
帶有下標的擴充套件
向已宣告的例項新增新的下標也可以透過擴充套件實現。
示例
Swift 程式演示如何使用擴充套件在下標中新增新功能。
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
帶有巢狀型別的擴充套件
類、結構體和列舉例項的巢狀型別也可以透過擴充套件進行擴充套件。
示例
Swift 程式演示如何使用擴充套件在巢狀型別中新增新功能。
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(numb: [0, 1, 2, 3, 4, 7])
輸出
它將產生以下輸出:
10 20 30 40 50 50