Swift之類的屬性

存儲屬性
1.存儲常量或者變量的
2.要么給它默認值介蛉,要么在構(gòu)造方法里初始化

計算屬性
1.計算屬性不直接存儲值
2.訪問時候調(diào)用get,賦值調(diào)用set,類似java里的封裝
3.get里一定要有return
4.set中有一個內(nèi)置的newValue變量,用于接收外界賦的新值
5.set里不能給當(dāng)前的計算屬性賦值,否則死循環(huán)
6.只讀計算屬性:只提供get琅束,沒有set愕鼓,在寫的時候可以省略get{}

類屬性
1.類屬性用static修飾
2.類屬性是和類關(guān)聯(lián)的所宰,而不是單獨屬于某個對象
3.只能通過類名來訪問悲没,這點和java不同

    //存儲屬性
    var age:Int = 0
    var javaScore:Double = 0.0
    var htmlScore:Double = 0.0
    
    //計算屬性
    var averageScore:Double {
        //獲取值
        get{
            print("get被調(diào)用")
            return (javaScore+htmlScore)/2  //get中必須有return語句
        }
        //賦值
        set{
            print("set被調(diào)用望门,\(newValue)")
            //self.averageScore = newValue 不要再set里給計算屬性賦值形娇,負責(zé)死循環(huán)
        }
    }
    
    //只讀計算屬性
    var averageScore2:Double {
        //獲取值
        get{
            print("get被調(diào)用")
            return (javaScore+htmlScore)/2
        }
        }
        //只讀計算屬性-省略get{}
        var averageScore3:Double {
            //獲取值
             print("get被調(diào)用")
            return (javaScore+htmlScore)/2
        }
        //類屬性
        static var courseCount:Int = 2
    }
    var stu = Student()
    //使用存儲屬性
    stu.age = 18
    stu.javaScore = 80
    stu.htmlScore = 80
    
    //使用計算屬性
    print(stu.averageScore)
    stu.averageScore = 100
    
    //只讀計算屬性
    print(stu.averageScore2)
    print(stu.averageScore3)
    
    //使用類屬性
    print(stu.courseCount)//不能通過對象訪問
    print(Student.courseCount)

懶加載屬性(懶屬性)
懶加載屬性的引入

1.需求:需要對區(qū)間進行計算,假設(shè)該計算計算量很大筹误,很耗時,把最終計算結(jié)果放到result變量中

class CloseRange{
    var start:Int = 0
    var end:Int = 1000
    //方案:result設(shè)計為計算屬性
    var result:Int{
        get{
            print("開始計算...")
            var res = 0
            //此時采用求和操作來模擬進行大量計算桐早。
            for i in self.start...self.end{
                res += i
            }
            return res
        }
    }
 } 
var range = CloseRange()
print(range.result)
print(range.result)
print(range.result)
print(range.result)

2.思考:把result屬性定義為計算屬性有沒有什么缺陷?
3.缺陷:每訪問一次厨剪,就計算一次哄酝,計算結(jié)果沒法存儲下來。
4.改進:用的時候祷膳,才會計算陶衅,計算1次,并且能把計算結(jié)果保存下來直晨。--》引入懶加載屬性來解決

懶加載的使用:

lazy var 變量:類型 = {代碼段}()

只會賦值一次
只有在第一次使用的時候搀军,才會執(zhí)行閉包膨俐,然后把閉包返回值賦值給屬性
用的時候,才會計算罩句,計算1次焚刺,并且能把計算結(jié)果保存下來

class CloseRange{
    var start:Int = 0
    var end:Int = 1000
     //方案:result設(shè)計為懶加載屬性
    lazy var result:Int = {
            ()->Int  in 
             print("開始計算...")
            var res = 0
            //此時采用求和操作來模擬進行大量計算。
            for i in self.start...self.end{
                res += i
            }
            return res
    }()
}

var range = CloseRange()
print(range.result)//只有第一次調(diào)用的時候執(zhí)行閉包门烂,干活只干1次乳愉!
print(range.result)
print(range.result)
print(range.result)

屬性觀察器
1.監(jiān)聽和響應(yīng)屬性值的變化
2.針對存儲屬性和類屬性的變化
3.怎么實現(xiàn)?為觀察的屬性添加觀察器
willSet 在賦新值之前調(diào)用屯远,使用內(nèi)置變量newValue
didSet 賦新值之后調(diào)用,使用oldValue

class Student{
    //存儲屬性
    var age:Int = 0
    var javaScore:Double = 0.0
    var htmlScore:Double = 0.0
    
    //屬性觀察器
    var name:String = "test"{
        willSet{
            print("willSet被調(diào)用匾委,newValue的值\(a)")
        }
        didSet{
             print("didSet被調(diào)用,oldValue的值\(b)")
        }
    }
    
}
var stu = Student()
stu.name = "zm"
stu.name = "0223"

不同使用場景剖析
懶加載屬性使用場景
場景一:位置的定位

class Location{
    let latitude:Double //經(jīng)度
    let longitude:Double  //緯度
    init(latitude:Double,longitude:Double){
        self.latitude = latitude
        self.longitude = longitude
    }
    lazy var address:String = {
        //進行經(jīng)緯度分析,復(fù)雜的計算
        return "xxxx"
    }()
}

場景二:閱讀類APP
問題:書本的內(nèi)容到底時候加載到內(nèi)存里?
在訪問列表頁:書名氓润、封面赂乐、簡介,不需要加載書本的內(nèi)容
在詳情頁咖气,只有用戶點擊閱讀挨措,加載內(nèi)容到內(nèi)存里。

class Book{
    let name:String = ""
    
    lazy var content:String = {
         //從網(wǎng)絡(luò)讀取
         return "xxxx"
    }()
}

屬性觀察器使用場景
有一個設(shè)備崩溪,對通電的最大電流值有要求浅役,最高30。
要求對current屬性重新設(shè)計伶唯,滿足如下:
1.< 30, 提示正常賦值
2.= 30觉既,提醒你已經(jīng)到最大值
3.>30 ,提醒用戶,當(dāng)前電流太高乳幸,此次賦值失敗瞪讼,回到原始值。

class Machine{
    let max = 30 //允許通過的最大電流
    var current = 10 {
        willSet{
            if newValue < max{
                print("正常賦值")
            }
            if newValue == max{
                print("注意粹断!當(dāng)前電流已經(jīng)到達最大值")
            }
            
        }
        didSet{
            if current > max{
                print("注意符欠!當(dāng)前電流已經(jīng)超過最大值30,回滾到原來的值")
                current = oldValue
            }
        }
    }
}
var m1 = Machine()
m1.current = 30
m1.current = 40
m1.current = 100
print(m1.current)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓶埋,一起剝皮案震驚了整個濱河市希柿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌养筒,老刑警劉巖曾撤,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異晕粪,居然都是意外死亡挤悉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門兵多,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尖啡,“玉大人橄仆,你說我怎么就攤上這事⌒普叮” “怎么了盆顾?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長畏梆。 經(jīng)常有香客問我您宪,道長,這世上最難降的妖魔是什么奠涌? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任宪巨,我火速辦了婚禮,結(jié)果婚禮上溜畅,老公的妹妹穿的比我還像新娘捏卓。我一直安慰自己,他們只是感情好慈格,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布怠晴。 她就那樣靜靜地躺著,像睡著了一般浴捆。 火紅的嫁衣襯著肌膚如雪蒜田。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天选泻,我揣著相機與錄音冲粤,去河邊找鬼。 笑死页眯,一個胖子當(dāng)著我的面吹牛梯捕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播餐茵,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼科阎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了忿族?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蝌矛,失蹤者是張志新(化名)和其女友劉穎道批,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體入撒,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡隆豹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了茅逮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片璃赡。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡判哥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出碉考,到底是詐尸還是另有隱情塌计,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布侯谁,位于F島的核電站锌仅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏墙贱。R本人自食惡果不足惜热芹,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惨撇。 院中可真熱鬧伊脓,春花似錦、人聲如沸魁衙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纺棺。三九已至榄笙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間祷蝌,已是汗流浹背茅撞。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留巨朦,地道東北人米丘。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像糊啡,于是被迫代替她去往敵國和親拄查。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容