swift_屬性

存儲(chǔ)屬性

存儲(chǔ)常量或者變量的,要么給它默認(rèn)值,要么在構(gòu)造方法里初始化

計(jì)算屬性

計(jì)算屬性不直接存儲(chǔ)值
訪問(wèn)時(shí)候調(diào)用get,賦值調(diào)用set,類似java里的封裝
get里一定要有return
set中有一個(gè)內(nèi)置的newValue變量,用于接收外界賦的新值
set里不能給當(dāng)前的計(jì)算屬性賦值嘱根,否則死循環(huán)
只讀計(jì)算屬性:只提供get恋博,沒(méi)有set状原,在寫的時(shí)候可以省略get{}

類屬性

類屬性用static修飾
類屬性是和類關(guān)聯(lián)的菩收,而不是單獨(dú)屬于某個(gè)對(duì)象
只能通過(guò)類名來(lái)訪問(wèn)拨齐,這點(diǎn)和java不同

class Student{
    //存儲(chǔ)屬性
    var age:Int = 0
    var javaScore:Double = 0.0
    var htmlScore:Double = 0.0
    
    //計(jì)算屬性
    var averageScore:Double {
        //獲取值
        get{
            print("get被調(diào)用")
            return (javaScore+htmlScore)/2  //get中必須有return語(yǔ)句
        }
        //賦值
        set{
            print("set被調(diào)用,\(newValue)")
            //self.averageScore = newValue  不要再set里給計(jì)算屬性賦值驰贷,否則死循環(huán)
        }
    }
    
    
    //只讀計(jì)算屬性
    var averageScore2:Double {
        //獲取值
        get{
            print("get被調(diào)用")
            return (javaScore+htmlScore)/2  
        }
}
    //只讀計(jì)算屬性-省略get{}
    var averageScore3:Double {
        //獲取值
            print("get被調(diào)用")
            return (javaScore+htmlScore)/2  
    }
    
    //類屬性
    static var courseCount:Int = 2
    
}
var stu = Student()
//使用存儲(chǔ)屬性
stu.age = 18
stu.javaScore = 90
stu.htmlScore = 60

//使用計(jì)算屬性
print(stu.averageScore)
stu.averageScore = 100

//只讀計(jì)算屬性
print(stu.averageScore2)
print(stu.averageScore3)

//使用類屬性
print(stu.courseCount)//不能通過(guò)對(duì)象訪問(wèn)
print(Student.courseCount)

懶加載屬性(懶屬性)

懶加載屬性的引入
需求:需要對(duì)區(qū)間進(jìn)行計(jì)算盛嘿,假設(shè)該計(jì)算計(jì)算量很大,很耗時(shí),把最終計(jì)算結(jié)果放到result變量中

class CloseRange{
    var start:Int = 0
    var end:Int = 1000
    //方案:result設(shè)計(jì)為計(jì)算屬性
    var result:Int{
        get{
            print("開(kāi)始計(jì)算...")
            var res = 0
            //此時(shí)采用求和操作來(lái)模擬進(jìn)行大量計(jì)算括袒。
            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)
思考:把result屬性定義為計(jì)算屬性有沒(méi)有什么缺陷次兆?
缺陷:每訪問(wèn)一次,就計(jì)算一次锹锰,計(jì)算結(jié)果沒(méi)法存儲(chǔ)下來(lái)芥炭。
改進(jìn):用的時(shí)候,才會(huì)計(jì)算恃慧,計(jì)算1次园蝠,并且能把計(jì)算結(jié)果保存下來(lái)。--》引入懶加載屬性來(lái)解決

懶加載的使用:

lazy var 變量:類型 = { 代碼段}()
只會(huì)賦值一次
只有在第一次使用的時(shí)候痢士,才會(huì)執(zhí)行閉包彪薛,然后把閉包返回值賦值給屬性
用的時(shí)候,才會(huì)計(jì)算,計(jì)算1次善延,并且能把計(jì)算結(jié)果保存下來(lái)
class CloseRange{
    var start:Int = 0
    var end:Int = 1000
     //方案:result設(shè)計(jì)為懶加載屬性
    lazy var result:Int = {
            ()->Int  in 
             print("開(kāi)始計(jì)算...")
            var res = 0
            //此時(shí)采用求和操作來(lái)模擬進(jìn)行大量計(jì)算少态。
            for i in self.start...self.end{
                res += i
            }
            return res
    }()
}

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

屬性觀察器

監(jiān)聽(tīng)和響應(yīng)屬性值的變化
針對(duì)存儲(chǔ)屬性和類屬性的變化
怎么實(shí)現(xiàn)彼妻?為觀察的屬性添加觀察器
willSet 在賦新值之前調(diào)用,使用內(nèi)置變量newValue
didSet 賦新值之后調(diào)用,使用oldValue
class Student{
    //存儲(chǔ)屬性
    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 = "miao"
stu.name = "123"

不同使用場(chǎng)景剖析

懶加載屬性使用場(chǎng)景

場(chǎng)景一:位置的定位

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ìn)行經(jīng)緯度分析,復(fù)雜的計(jì)算
        return "xxxx"
    }()
}

場(chǎng)景二:閱讀類APP
問(wèn)題:書(shū)本的內(nèi)容到底時(shí)候加載到內(nèi)存里澳骤?
在訪問(wèn)列表頁(yè):書(shū)名、封面澜薄、簡(jiǎn)介为肮,不需要加載書(shū)本的內(nèi)容
在詳情頁(yè),只有用戶點(diǎn)擊閱讀肤京,加載內(nèi)容到內(nèi)存里颊艳。

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

屬性觀察器使用場(chǎng)景

有一個(gè)設(shè)備,對(duì)通電的最大電流值有要求忘分,最高30棋枕。
要求對(duì)current屬性重新設(shè)計(jì),滿足如下:
1.< 30, 提示正常賦值
2.= 30妒峦,提醒你已經(jīng)到最大值
3.>30 ,提醒用戶重斑,當(dāng)前電流太高,此次賦值失敗肯骇,回到原始值窥浪。

class Machine{
    let max = 30 //允許通過(guò)的最大電流
    var current = 10 {
        willSet{
            if newValue < max{
                print("正常賦值")
            }
            if newValue == max{
                print("注意!當(dāng)前電流已經(jīng)到達(dá)最大值")
            }
            
        }
        didSet{
            if current > max{
                print("注意笛丙!當(dāng)前電流已經(jīng)超過(guò)最大值30漾脂,回滾到原來(lái)的值")
                current = oldValue
            }
        }
    }
}
var m1 = Machine()
m1.current = 20
m1.current = 30
m1.current = 100
print(m1.current)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市胚鸯,隨后出現(xiàn)的幾起案子骨稿,更是在濱河造成了極大的恐慌,老刑警劉巖姜钳,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坦冠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡哥桥,警方通過(guò)查閱死者的電腦和手機(jī)蓝牲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)泰讽,“玉大人,你說(shuō)我怎么就攤上這事∫研叮” “怎么了佛玄?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)累澡。 經(jīng)常有香客問(wèn)我梦抢,道長(zhǎng),這世上最難降的妖魔是什么愧哟? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任奥吩,我火速辦了婚禮,結(jié)果婚禮上蕊梧,老公的妹妹穿的比我還像新娘霞赫。我一直安慰自己,他們只是感情好肥矢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布端衰。 她就那樣靜靜地躺著,像睡著了一般甘改。 火紅的嫁衣襯著肌膚如雪旅东。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,610評(píng)論 1 305
  • 那天十艾,我揣著相機(jī)與錄音抵代,去河邊找鬼。 笑死忘嫉,一個(gè)胖子當(dāng)著我的面吹牛荤牍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播榄融,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼参淫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了愧杯?” 一聲冷哼從身側(cè)響起涎才,我...
    開(kāi)封第一講書(shū)人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎力九,沒(méi)想到半個(gè)月后耍铜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡跌前,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年棕兼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抵乓。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伴挚,死狀恐怖靶衍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情茎芋,我是刑警寧澤颅眶,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站田弥,受9級(jí)特大地震影響涛酗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜偷厦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一商叹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧只泼,春花似錦剖笙、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至籍滴,卻和暖如春酪夷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孽惰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工晚岭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人勋功。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓坦报,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親狂鞋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子片择,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

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

  • 存儲(chǔ)屬性 存儲(chǔ)常量或者變量的 要么給它默認(rèn)值,要么在構(gòu)造方法里初始化 計(jì)算屬性 計(jì)算屬性不直接存儲(chǔ)值 訪問(wèn)時(shí)候調(diào)用...
    吐個(gè)泡泡_e9f0閱讀 163評(píng)論 0 0
  • 存儲(chǔ)屬性 1.存儲(chǔ)常量或者變量的 2.要么給它默認(rèn)值骚揍,要么在構(gòu)造方法里初始化 計(jì)算屬性 1.計(jì)算屬性不直接存儲(chǔ)值 ...
    江河日下i閱讀 118評(píng)論 0 1
  • Swift 屬性將值跟特定的類字管、結(jié)構(gòu)或枚舉關(guān)聯(lián)。屬性可分為存儲(chǔ)屬性和計(jì)算屬性: 存儲(chǔ)屬性 簡(jiǎn)單來(lái)說(shuō)信不,一個(gè)存儲(chǔ)屬性就...
    郭小C_閱讀 237評(píng)論 0 0
  • 一嘲叔、存儲(chǔ)屬性:存儲(chǔ)常量或者變量注意:1、給它默認(rèn)值抽活,2硫戈、在構(gòu)造方法里初始化 二、計(jì)算屬性計(jì)算屬性不直接存儲(chǔ)值下硕,而是...
    及至滿洲閱讀 103評(píng)論 0 0
  • 存儲(chǔ)屬性?存儲(chǔ)常量或者變量的?要么給它默認(rèn)值丁逝,要么在構(gòu)造方法里初始化 計(jì)算屬性?計(jì)算屬性不直接存儲(chǔ)值?訪問(wèn)時(shí)候調(diào)用...
    柯書(shū)樂(lè)閱讀 204評(píng)論 0 0