一
.泛型的作用
1. 泛型是一種非常靈活的語法,泛型允許程式在函式、列舉、結構體、類中定義型別形參,這種型別形參實際代表的型別是動態改變的
----
程式可以等到真正使用這些函式、列舉、結構體時才為這些型別形參傳入實際的型別。而且每次使用這些函式、列舉、結構體、類時都可以為泛型的型別形參傳入不同的型別。
2. 例項上,
swift
的泛型無處不在,許多
swift
的標準庫都是通過泛型來實現的,比如已經學習過的陣列和字典。
3. 如果為了實現某個功能而定義了乙個函式,在後期的需求變化中,仍然需要這個函式的功能,但是傳入引數的時候引數的型別發生了變化,其他的都沒有變。這個時候如果重新再寫乙個函式,那也只是引數型別不同而已,函式的執行體和之前的函式是完全相同的。如果下次傳入的引數變成第三種型別了呢?
----
解決這個問題的關鍵就是泛型。
二.泛型函式
1. 泛型函式允許在定義函式指定乙個或多個型別佔位符,這個型別佔位符用於指定函式的乙個或多個形參型別或者返回值型別暫時是不確定的,只有等到呼叫函式時才能確定這些形參型別或返回值型別。
2. 定義泛型函式的語法:
func
函式名(
形參列表
) ->
返回值型別
不難發現,泛型函式的函式簽名多了型別佔位符(也叫型別形參)宣告,型別佔位符宣告以尖括號括起來,多個佔位符之間以逗號分隔,所有的型別佔位符宣告放在函式名譽形參列表之間。
3. 舉個栗子:
func copyarray (src : [t], inout dest : [t])}
var arr1 = [29, 2, 3]
copyarray([11, 12, 13], &arr1)
var arr2 = ["abc", "def"]
sopyarray(["android", "swift", "objective-c"], &arr2)
var arr3 = [1.1, 2.2, 3.3]
copyarray([4.4, 5, 10.1), &arr3)
4. 使用泛型定義多個型別的用法和上面例子中定義乙個型別引數的用法相同。 三
.泛型型別
1. 泛型不僅可以用在函式中,也可以在
swift
的型別(
列舉、結構體、類)中使用,使用了泛型的型別就被稱為泛型型別。
2. swift
內建支援的
array
、dictionary
就是泛型,結構體。
3. 可以為任何型別(包括列舉、結構體、類)增加泛型宣告,舉個例子:
struct fkrect}
let rect1 = fkrect(x : 1.1, y : 2.2, wdith : 3.3, height : 4.4)
let rect2 = fkrect(x : 1, y : 2, width : 3, height : 4)
4. 當建立了帶泛型宣告的父類之後,可以從該父類派生子類。需要指出的是,使用這些父類時不能再包含型別形參。
例如:這樣是錯誤的,
類不能跟型別形參
5. 定義函式、列舉、結構體、類時可以宣告型別形參,使用函式、列舉、結構體、類時則需要為型別形參傳入例項的型別。
6. swift
還要求泛型類的子類必須也帶泛型宣告,因此如果想從
類派生乙個子類,則可以這樣寫:
需要說明的是,e與
string
並沒有任何關係。
7. 擴充套件泛型型別:擴充套件泛型型別時,程式並不需要再擴充套件列表中列出型別形參,擴充套件體可以直接使用泛型型別多定義的型別形參。舉個例子:}
} var result = a1.bigthan(a2)
從上面可看出,擴充套件
時無須列出形參列表,但程式在擴充套件中完全可以使用型別形參t。
每天學一點(一)
記錄學習內容 js中對於函式的建立,在使用函式表示式和函式宣告相結合時,正確寫法為 var sum function sum a,b console.log sum 1,2 輸出3 若定義的變數和函式名稱書寫不一致,則會產生錯誤。var sum1 function sum2 a,b console....
每天學一點Swift 閉包 三
八 捕獲上下文中的變數和常量 1.閉包可以用訪問或修改閉包所在上下文中的變數或常量 對於常量只是訪問 這個過程被稱為捕獲。2.即使定義這些變數或常量的作用域已經不存在了,閉包也依然可以訪問或修改他們。3.swift 中最簡單的閉包形式就是巢狀函式 巢狀函式可以捕獲它所在的封閉韓式的變數 常量或引數。...
每天學一點6
1.void運算子 作用於任何值都將返回undefined,常用遮蔽超連結的返回值 舉例 鳳凰網 2.window.prompt 彈出乙個輸入對話方塊 語法格式 prompt text defaulttext 引數說明 text 提示資訊 defaulttext 是可選項,是輸入框中預設顯示的文字 ...