swift型別擴充套件

2021-07-09 13:54:01 字數 2577 閱讀 2604

/**

1.擴充套件語法

2.計算型屬性

3.構造器

4.方法

5.下標

6.巢狀型別

擴充套件就是向乙個已有的類、結構體或列舉型別新增新功能。包括在沒有許可權獲取原始源**的情況下擴充套件型別的能力(即逆向建模)。擴充套件和oc中的分類(category)類似。不過與oc不同的是,swift的擴充套件沒有名字。

如果定義乙個擴充套件向已有型別新增新功能,那麼這個心功能對該型別的所有已有例項中都是可用的,即使他們是在換個擴充套件的前面定義的

*///擴充套件語法

/**宣告乙個擴充套件使用關鍵字extension

extension sometype

乙個擴充套件可以擴充套件乙個已有型別,使其能夠適配乙個或多個協議。當這種情況發生時,介面的名字應該完全按照類或結構體的名字的方式進行書寫

extension sometype: someprotocol, anotherproctocol

按照這種方式新增的協議遵循者被稱之為在擴中新增協議遵循者

*///計算型屬性

/**擴充套件可以向已有型別新增計算型例項屬性和計算型型別屬性

*/extension

double

var m: double

var cm: double

var mm: double

var ft: double

}let oneinch = 25.4.mm;

print

("one inch is \(oneinch) meters");

let threefeet = 3.ft;

print

("three feet is \(threefeet) meters");

let amarathon = 42.km + 195.m;

print

("a marathon is \(amarathon) meters long");

/**擴充套件可以新增新的計算屬性,但是不可以新增儲存屬性,也不可以向已有屬性新增屬性觀測器

*///構造器

/**擴充套件可以向已有型別新增新的構造器。這可以讓你擴充套件其它型別,將自己的定製型別作為構造器引數,或者提供該型別的原始實現中沒有包含的額外初始化選項

如果使用擴充套件向乙個值型別新增乙個構造器,該構造器向所有的儲存屬性提供預設值,而且沒有定義任何定製構造器,那麼對於來自你的擴充套件構造器中的值型別,你可以呼叫預設構造器的成員級構造器,正如在值型別的構造器授權中描述的,如果你已經把構造器寫成值型別原始實現的一部分,上述規則不再使用

*/struct size

struct point

struct rect

let defaultrect = rect();

//let memberwiserect = rect(origin: point(x: 2.0, y: 2.0), size: size(width: 5.0, height: 5.0));

extension

rect

}let centerrect = rect(center: point(x: 4.0, y: 4.0), size: size(width: 3.0, height: 3.0));

print

("x:

\(centerrect.origin.x),y:

\(centerrect.origin.y)\nwidth:

\(centerrect.size.width),height:

\(centerrect.size.height)");

/**如果你使用擴充套件提供了乙個新的構造器,你依舊有責任保證構造過程能夠讓所有例項完全初始化

*///方法

/**擴充套件可以向已有型別新增新的例項方法和型別方法

*/extension

int}}3

.repetitons();

4.repetitons();

//修改例項方法

/**通過擴充套件新增例項方法也可以修改該例項本身。結構體和列舉型別中修改self或其屬性的方法必須將該例項方法標註為mutating,正如來自原始實現的修改方法一樣

*/extension

int}

var someint = 3;

print

(someint.

square

());

//下標

/**擴充套件可以向乙個已有型別新增新下標

逆向下標

*/extension

intfor_in

1...digitindex

ifself / decimalbase < 1

return (self / decimalbase) % 10;}}

print

(73456875885[6]);

//巢狀型別

/**擴充套件可以向已有的類、結構體和列舉新增新的巢狀型別

*/extension

character

var kind: kind }}

func printletterkinds(word: string) }}

printletterkinds(

"hello");

swift 擴充套件

擴充套件就是為乙個已有類 結構體 列舉型別或者協議型別新增新功能。這包括在沒有許可權獲取原始源 的情況下擴充套件型別的能力。擴充套件和objectvie從中的分類類似。swift中的擴充套件可以 新增計算型別屬性和計算型型別屬性 定義例項方法和型別方法 提供新的構造器 定義下標 定義和使用新的巢狀型...

Swift基礎 擴充套件

對已有的類,結構體或者協議型別新增新的功能,就叫做擴充套件。這是我喜歡swift語法的原因之一,超實用的。語法很簡單 extension 已有型別來一波例子,你就知道了 擴充套件計算屬性 extension float let number float 3number.twice 結果為6擴充套件方...

Swift 擴充套件專題

import foundation struct point struct size class rect 只能擴充套件五種東西 1.方法 2.計算型屬性 3.便利的建構函式 4.巢狀的列舉型別 5.下標 不允許擴充套件成員變數和指定的建構函式 extension rect convenience ...