擴充套件就是向乙個已有的類、結構體或列舉型別新增新功能,這包括在沒有許可權獲取原始源**的情況下擴充套件型別的能力。
擴充套件和objective-c
中的分類(category
)類似,但是它要比分類強大的多,它不僅可以擴充套件類,還可以擴充套件協議、列舉、結構體,另外擴充套件也不侷限於擴充套件方法,還可以擴充套件便利構造方法、計算屬性、下標指令碼等
swift中的擴充套件可以:
新增計算屬性和計算靜態屬性
新增例項方法和型別方法
提供新的構造器
新增下標指令碼
定義和使用新的巢狀型別
//使用擴充套件需要使用到extension關鍵字,這裡的sometype可以是類、結構體、列舉、協議等型別
extension sometype
//乙個擴充套件可以擴充套件乙個已有型別,使其能夠適配乙個或多個協議
extension sometype: someprotocol, anotherproctocol
1. 擴充套件屬性(只能是計算屬性)//擴充套件系統結構體double,新增計算屬性
extension double //計算唯讀屬性的簡化寫法
var m : double
var cm: double
var mm: double
var ft: double
}var inch:double = 25.4
let oneinch = inch.mm
print("one inch is \(oneinch) meters")
// 列印輸出:one inch is 0.0254 meters
var feet:double = 3.0
let threefeet = feet.ft
print("three feet is \(threefeet) meters")
// 列印輸出:three feet is 0.914399970739201 meters
注意:擴充套件可以新增新的計算屬性,但是不可以新增儲存屬性,也不可以向已有屬性新增屬性觀測器。2. 擴充套件例項方法和型別方法
//向int型別新增乙個名為repetitions的新例項方法,接受乙個空引數無返回值的函式型別引數
extension int
}var value:int = 3
value.repetitions()
/* 列印:
hello world
hello world
hello world
*/value.repetitions
/* 列印:
extension
extension
extension
*/print(int.number())//列印:[1, 2, 3]
3. 擴充套件構造器//定義乙個類
class person
}init(firstname:string, lastname:string)
}//擴充套件該類,擴充套件便利構造器方法
extension person
}var p = person()
p.firstname = "liu"
p.lastname = "ting"
p.age = 22
print(p.fullname) //列印:liu ting
/* 擴充套件結構體 */
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))
// centerrect的原點是 (2.5, 2.5),大小是 (3.0, 3.0)
類型別只能擴充套件便利構造方法,不能擴充套件指定構造方法
值型別擴充套件指定構造方法訪問預設構造方法和成員逐一構造器的條件是:
4. 擴充套件下標指令碼
//為系統型別int新增擴充套件
extension int
//擴充套件計算屬性
var kind: kind
}}var word = "hello"
//遍歷字串的所有字元
for character in word.characters
}/* 列印:
h是子音
e是母音
l是子音
l是子音
o是母音
*/
靈活使用swift的擴充套件,可以提高我們的編碼效率,就像我們在oc中積累專案經驗,有一些東西會已分類的形式進行積累,可以方便我們移植到其他專案中,提高我們的效率,swift擴充套件就是比這個更加強大的存在,沒理由不用 iOS 學習筆記, Swift名字空間
在swift中,名字空間是用class extension 巢狀來實現的,以下用乙個簡單樣例來進行展示 main.swift swiftnamespace created by yao yu on 14 8 1.swift名字空間使用例項 import foundation 定義頂層名字空間 cla...
iOS協議的學習筆記swift版
協議,協議就是類成員函式的引用,用於類之間傳值.形象的說就是有需求的類沒有可實現需求的成員函式,委託有實現需求的成員函式的類 實現需求,可以簡化 使 便於維護,使用的過程就是引用,引用只看物件,所以需要對協議進行宣告 格式protocol protocol 自定義型別,引用型別可以建立引用 類名 繼...
IOS之Objective C學習筆記(六)
今天繼續記錄我的學習過程,現在開始 1.nsarray 是乙個cocoa類,用來儲存物件的有序列表,你可以在nsarray中放入任意型別的物件 nsstring,car,shape,tire或者其他物件。不過值得注意的是,它有兩個 限制,首先它只能儲存objective c的物件,而不能儲存c語言的...