1烫止、Swift中蒋荚,屬性分為存儲屬性、計算屬性馆蠕。
存儲屬性:存儲數(shù)據(jù)期升,常量屬性let惊奇,變量屬性var,適用于類和結(jié)構(gòu)體播赁,枚舉不能用
計算屬性:本身不存儲數(shù)據(jù)颂郎,而是從其他存儲屬性中計算得到數(shù)據(jù),類容为、結(jié)構(gòu)體乓序、枚舉都能用
2、延時加載坎背,類中的某一個屬性替劈,前面加了lazy,這樣屬性只有在第一次訪問的時候得滤,才會加載陨献,如果永遠不訪問,那么就不會創(chuàng)建懂更,可以減少內(nèi)存的占用
3眨业、計算屬性語法:
面向?qū)ο箢愋停悺⒚杜e膜蛔、結(jié)構(gòu)體) 類型名 {
存儲屬性(var let)
var 計算屬性名:數(shù)據(jù)類型 {
get {
return 計算后屬性值
}
set(新屬性值) {
...
}
}
}
計算屬性坛猪,必須用var聲明,變量
取出屬性:print(類型名.計算屬性名) ?Getter訪問器
屬性賦值:類型名.計算屬性名 = 要賦的值 ?Setter訪問器
4皂股、只讀計算屬性墅茉,只有g(shù)et,沒有set
var 計算屬性名:數(shù)據(jù)類型 { return 計算后屬性值 }呜呐,省略了get
5就斤、枚舉用計算屬性是,必須將實例值轉(zhuǎn)化為原始值蘑辑,self.rawValue洋机,否則不能進行字符串拼接
self:類、結(jié)構(gòu)體洋魂、枚舉中绷旗,表示當前實例,訪問自身的實例方法和屬性
6副砍、屬性觀察者衔肢,監(jiān)聽存儲屬性的變化,變量存儲屬性豁翎,不能監(jiān)聽延遲存儲屬性角骤、常量存儲屬性
willSet:修改之前調(diào)用
didSet:修改之后立刻調(diào)用
面向?qū)ο箢愋停悺⒔Y(jié)構(gòu)體) 類型名 {
var 存儲屬性:屬性數(shù)據(jù)類型 = 初始化值 {
willSet(新值){
}
didSet(舊值){
}
}
}
新值:傳遞給willSet觀察者的參數(shù)心剥,保存了將要替換原來屬性的新值邦尊,參數(shù)的聲明可以省略背桐,系統(tǒng)會分配一個默認的參數(shù)newValue
舊值:傳遞給didSet觀察者的參數(shù),保存了被新屬性替換的舊值蝉揍,參數(shù)聲明可以省略链峭,系統(tǒng)會分配一個默認的參數(shù)oldValue
7、靜態(tài)屬性
實例屬性:屬性與實例個體有關(guān)疑苫;靜態(tài)屬性(類型屬性):屬性與實例個體誤關(guān)熏版,是所有個體實例共享的屬性
struct 結(jié)構(gòu)體名 {
static var(let) 存儲屬性 =?“”
static var 計算屬性名: 屬性數(shù)據(jù)類型{
get、set
}
}
enum 枚舉名 {
static var(let) 存儲屬性 =?“”
static var 計算屬性名: 屬性數(shù)據(jù)類型{
get捍掺、set
}
}
class 類名 {
static var(let) 存儲屬性 =?“”
class(static) var 計算屬性名: 屬性數(shù)據(jù)類型{
get撼短、set
}
}
類靜態(tài)計算屬性,static定義挺勿,則不能在子類中被重寫曲横;class定義,可以被子類重寫
類型
實例存儲屬性
靜態(tài)存儲屬性
實例計算屬性
靜態(tài)計算屬性
類
支持
支持
支持
支持
結(jié)構(gòu)體
支持
支持
支持
支持
枚舉
不支持
支持
支持
支持
類型名.靜態(tài)屬性:訪問靜態(tài)屬性不瓶;實例.實例屬性:訪問實例屬性
8禾嫉、下標
數(shù)組的下標,是正數(shù)類型的索引蚊丐,從0開始
字典的下標熙参,是它的“鍵”
面向?qū)ο箢愋停悺⒔Y(jié)構(gòu)體麦备、枚舉) 類型名 {
subscript(參數(shù):參數(shù)數(shù)據(jù)類型) -> 返回值數(shù)據(jù)類型 {
get孽椰、set
}
}
9、二維數(shù)組
structDoubleDimensionalArray {
letrows:Int, columns:Int
vargrid: [Int]
init(rows:Int, columns:Int) {
self.rows= rows
self.columns= columns
grid=Array(repeating:0, count: rows * columns)
}
subscript(row:Int, col:Int) ->Int{
get{
returngrid[(row *columns) + col]
}
set(newValue1) {
grid[(row *columns) + col] = newValue1
}
}
}
letCOL_NUM =10
letROW_NUM =10
varary2 =DoubleDimensionalArray(rows:ROW_NUM, columns:COL_NUM)
foriin0..
forjin0..
ary2[i,j]= i * j
}
}
foriin0..
forjin0..
print("\t\(ary2[i,j])", terminator:"")
}
print("\n")
}
10凛篙、方法
方法是在枚舉黍匾、結(jié)構(gòu)體、類中定義的函數(shù)呛梆,分為實例方法锐涯、靜態(tài)方法
可變方法:結(jié)構(gòu)體和枚舉中的方法,默認情況下填物,不能修改值類型變量屬性
mutating func (){} ?關(guān)鍵字mutating纹腌,將方法聲明為可變方法,能夠修改變量屬性滞磺,不能修改常量屬性
靜態(tài)方法壶笼,類靜態(tài)方法,static定義雁刷,則不能在子類中被重寫;class定義保礼,可以被子類重寫