擴充套件就是向乙個已有的類、結構體、列舉型別或協議型別新增新功能。而且還包括在沒有許可權獲取原始源**的情況下擴充套件型別的能力(逆向建模)。
swift中的擴充套件可以:
- 新增計算型屬性和計算型靜態屬性
- 定義例項方法和型別方法
- 提供新的構造器
- 定義下標
- 定義和使用新的巢狀型別
- 使乙個已有型別符合某個協議
在swift中,甚至都可以對乙個協議進行擴充套件,提供協議需要的實現,或新增額外的功能。
注意: 擴充套件是對乙個型別新增新的功能,但是不能重寫已有的功能。宣告乙個擴充套件使用關鍵字
extension
:
extension sometype
給已有型別擴充套件,是其能夠適配乙個或多個協議,而這種情況協議的名字應該完全按照類或結構體的名字方式進行書寫:
extension sometype:someprotocol, anotherproctocal
擴充套件可以向已有型別新增計算型例項屬性和計算型型別屬性:
// 功能: 給系統的double型別新增3個計算型例項屬性,方便單位的轉換,方便閱讀
// 預設設定的公尺為單位,即double型的值1.0,表示就是「1公尺」
extension double
// 公尺
var m:double
// 厘公尺
var cm:double
}// 身高183cm
let myheight = 183.cm;
print("我的身高\(myheight.m)公尺");
輸出結果:
我的身高1.83公尺
注意: 擴充套件可以新增新的計算屬性,但不可以新增儲存屬性,也不可以向已有屬性新增屬性觀察器!!!擴充套件可以向已有型別新增新的構造器,這讓可以擴充套件其他型別,將自己定製型別作為構造器引數,或者提供該型別的原始實現中沒有包含的額外初始化選項。
擴充套件能向類中新增新的便利構造器,但不能向類中新增新的指定構造器或析構器,即是說指定構造器和析構器必須總是由原始類實現來提供。
/**
矩形結構體rect
矩形大小結構體size
矩形位置結構體point
*/// 矩形大小
struct size
// 矩形位置
struct point
// 矩形位置以及大小
struct rect
// 使用結構體的成員逐一構造器
// 矩形是位置在原點(0,0),大小(3,3)
// 如下圖所示
01-矩形(0,0,3,3)
// 給rect結構體擴充套件乙個構造器,使用矩形的中心點和大小表示結構體
extension rect
}// 位置為(0,0),大小為(4,4),這個矩形的中心點位置是(2,2)
// 如下圖所示
let myrect = rect(center: point(x: 2, y: 2),
size: size(width: 4, height: 4));
// 驗證位置是不是(0,0)
print(myrect.origin.x)
print(myrect.origin.y)
輸出結果:
02-矩形(0,0,4,4)
擴充套件可以向已有型別新增新的例項方法和型別方法:
// 給int型別擴充套件乙個新例項方法
extension int
}}var num:int = 3;
num.hellofunc();
輸出結果:
1-hello swift!
2-hello swift!
3-hello swift!
擴充套件可以向已有型別新增新下標:
// 給int新增乙個下標
extension int
return (self / temp) % 10;
}}var num = 123456;
print(num[0]);
num = 784312312;
print(num[2]);
輸出結果:
63
18 swift開發iOS 結構體
swift 結構體 swift 結構體是構建 所用的一種通用且靈活的構造體。我們可以為結構體定義屬性 常量 變數 和新增方法,從而擴充套件結構體的功能。與 c 和 objective c 不同的是 結構體不需要包含實現檔案和介面。結構體允許我們建立乙個單一檔案,且系統會自動生成面向其它 的外部介面。...
swift 擴充套件
擴充套件就是為乙個已有類 結構體 列舉型別或者協議型別新增新功能。這包括在沒有許可權獲取原始源 的情況下擴充套件型別的能力。擴充套件和objectvie從中的分類類似。swift中的擴充套件可以 新增計算型別屬性和計算型型別屬性 定義例項方法和型別方法 提供新的構造器 定義下標 定義和使用新的巢狀型...
swift型別擴充套件
1.擴充套件語法 2.計算型屬性 3.構造器 4.方法 5.下標 6.巢狀型別 擴充套件就是向乙個已有的類 結構體或列舉型別新增新功能。包括在沒有許可權獲取原始源 的情況下擴充套件型別的能力 即逆向建模 擴充套件和oc中的分類 category 類似。不過與oc不同的是,swift的擴充套件沒有名字...