Swift 中的屬性

存儲(chǔ)屬性

作為實(shí)例一部分的常量或變量锥涕。
可以提供一個(gè)默認(rèn)值扶认,或者在初始化過(guò)程中設(shè)置(或修改)屬性的值,對(duì)常量的存儲(chǔ)屬性也適用粱挡。

struct FixedLengthRange {
    var firstValue: Int
    let length: Int
}
var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
// the range represents integer values 0, 1, and 2
rangeOfThreeItems.firstValue = 6
// the range now represents integer values 6, 7, and 8

存儲(chǔ)屬性變量還可以是惰性的(用 lazy 關(guān)鍵字表征)赠幕。
存儲(chǔ)屬性常量是不可以的,因?yàn)槌A勘仨氃诔跏蓟瓿芍坝兄笛ぃ栊郧笾悼赡馨l(fā)生在初始化完成之后榕堰。

計(jì)算屬性

計(jì)算屬性并不真的存儲(chǔ)一個(gè)值。TA們提供一個(gè) getter 和可選的 setter 間接獲取和設(shè)置其他屬性嫌套。

計(jì)算屬性必須使用 var 關(guān)鍵字定義逆屡。因?yàn)橛?jì)算屬性的值不是固定的,會(huì)根據(jù)計(jì)算而改變踱讨。
let 關(guān)鍵字只用于常量屬性魏蔗,來(lái)表征TA們的值在實(shí)例實(shí)例化之后不會(huì)再改變)

struct Point {
    var x = 0.0, y = 0.0
}
struct Size {
    var width = 0.0, height = 0.0
}
struct Rect {
    var origin = Point()
    var size = Size()
    var center: Point {
        get {
            let centerX = origin.x + (size.width / 2)
            let centerY = origin.y + (size.height / 2)
            return Point(x: centerX, y: centerY)
        }
        set(newCenter) {
            origin.x = newCenter.x - (size.width / 2)
            origin.y = newCenter.y - (size.height / 2)
        }
    }
}

// newValue is used if a name for the new value is not set.
struct AlternativeRect {
    var origin = Point()
    var size = Size()
    var center: Point {
        get {
            let centerX = origin.x + (size.width / 2)
            let centerY = origin.y + (size.height / 2)
            return Point(x: centerX, y: centerY)
        }
        set {
            origin.x = newValue.x - (size.width / 2)
            origin.y = newValue.y - (size.height / 2)
        }
    }
}

去除 setter,計(jì)算屬性就變成只讀的痹筛。

struct Cuboid {
    var width = 0.0, height = 0.0, depth = 0.0
    var volume: Double {
        return width * height * depth
    }
}

屬性觀察器

使用 willSet didSet莺治。

可以給存儲(chǔ)屬性(惰性的除外)提供觀察器,或者是任何被重寫(xiě)的繼承而來(lái)的屬性(無(wú)論是存儲(chǔ)屬性還是計(jì)算屬性)帚稠。
無(wú)需給非重寫(xiě)的計(jì)算屬性提供觀察器谣旁,因?yàn)榭梢灾苯釉?setter 中對(duì)值改變做出反應(yīng)。

屬性初始化時(shí)滋早,觀察器不會(huì)被調(diào)用蔓挖。

使用 willSet,新的值(自己定義一個(gè)名字馆衔,或者默認(rèn)使用newValue)會(huì)作為常量參數(shù)傳遞瘟判。
使用 DidSet,舊的值(自己定義一個(gè)名字角溃,或者默認(rèn)使用oldValue)會(huì)作為常量參數(shù)傳遞拷获。

class StepCounter {
    var totalSteps: Int = 0 {
        willSet(newTotalSteps) {
            println("About to set totalSteps to \(newTotalSteps)")
        }
        didSet {
            if totalSteps > oldValue  {
                println("Added \(totalSteps - oldValue) steps")
            }
        }
    }
}

屬性與全局和局部變量

目前為止,遇到的變量(無(wú)論全局還是局部)都是存儲(chǔ)變量减细,和存儲(chǔ)屬性類似匆瓜。
然而,也可以定義計(jì)算變量未蝌,或者為存儲(chǔ)變量提供觀察器驮吱。

不過(guò),要注意萧吠,全局的常量和變量總是惰性求值的(無(wú)需用 lazy 表征)左冬,而局部的常量和變量絕不會(huì)惰性求值。

類屬性

為類本身定義屬性纸型,

  1. 所有實(shí)例都可以使用的常量屬性(static constant in C)拇砰,
  2. 所有實(shí)例都可見(jiàn)的變量屬性(static variable in C)梅忌。

對(duì)于值類型,存儲(chǔ)屬性和計(jì)算屬性都可以定義除破,使用 static 關(guān)鍵字牧氮。
對(duì)于引用類型,只可以定義計(jì)算屬性瑰枫,使用 class 關(guān)鍵字踱葛。

對(duì)于存儲(chǔ)屬性,必須為其提供默認(rèn)值光坝,畢竟剖毯,類型本身沒(méi)有初始化過(guò)程...

struct SomeStructure {
    static var storedTypeProperty = "Some value."
    static let storedConstantTypeProperty = "Some value"
    static var computedTypeProperty: Int {
        // return an Int value here
    }
}
enum SomeEnumeration {
    static var storedTypeProperty = "Some value."
    static let storedConstantTypeProperty = "Some value"
    static var computedTypeProperty: Int {
        // return an Int value here
    }
}
class SomeClass {
    class var computedTypeProperty: Int {
        // return an Int value here
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市教馆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌擂达,老刑警劉巖土铺,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異板鬓,居然都是意外死亡悲敷,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門俭令,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)后德,“玉大人,你說(shuō)我怎么就攤上這事抄腔∑芭龋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵赫蛇,是天一觀的道長(zhǎng)绵患。 經(jīng)常有香客問(wèn)我,道長(zhǎng)悟耘,這世上最難降的妖魔是什么落蝙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮暂幼,結(jié)果婚禮上筏勒,老公的妹妹穿的比我還像新娘。我一直安慰自己旺嬉,他們只是感情好管行,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著邪媳,像睡著了一般病瞳。 火紅的嫁衣襯著肌膚如雪揽咕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天套菜,我揣著相機(jī)與錄音亲善,去河邊找鬼。 笑死逗柴,一個(gè)胖子當(dāng)著我的面吹牛蛹头,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播戏溺,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼渣蜗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了旷祸?” 一聲冷哼從身側(cè)響起耕拷,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎托享,沒(méi)想到半個(gè)月后骚烧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闰围,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年赃绊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片羡榴。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碧查,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出校仑,到底是詐尸還是另有隱情忠售,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布迄沫,位于F島的核電站档痪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏邢滑。R本人自食惡果不足惜腐螟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望困后。 院中可真熱鬧乐纸,春花似錦、人聲如沸摇予。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)侧戴。三九已至宁昭,卻和暖如春跌宛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背积仗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工疆拘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寂曹。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓哎迄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親隆圆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子漱挚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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

  • 1. 存儲(chǔ)屬性 簡(jiǎn)單來(lái)說(shuō),每一個(gè)存儲(chǔ)屬性就是存儲(chǔ)在特定類或結(jié)構(gòu)體實(shí)例里的一個(gè)常量或變量渺氧。存儲(chǔ)屬性可以使變量存儲(chǔ)屬性...
    keisme閱讀 512評(píng)論 0 0
  • Swift語(yǔ)法基礎(chǔ)(五)-- (類和結(jié)構(gòu)體、屬性秃踩、方法) 本章將會(huì)介紹 類和結(jié)構(gòu)體對(duì)比結(jié)構(gòu)體和枚舉是值類型類是引用...
    寒橋閱讀 1,081評(píng)論 0 1
  • 由于種種原因,簡(jiǎn)書(shū)等第三方平臺(tái)博客不再保證能夠同步更新业筏,歡迎移步 GitHub:https://github.co...
    萌面大道閱讀 7,719評(píng)論 5 10
  • 昨天陳林向我求婚了憔杨,五年半了,沒(méi)想到真能等到這一天蒜胖。 據(jù)陳林說(shuō)消别,大學(xué)軍訓(xùn)的第一天他就對(duì)我心懷鬼胎了。作為全校知名的...
    Ashley麥閱讀 216評(píng)論 1 0
  • 《春嬌救志明》是這個(gè)系列的最后一集台谢,故事講的還是兩人之間的感情寻狂,但是此時(shí)的春嬌已經(jīng)40歲,面臨“中女危機(jī)”朋沮,而36...
    自律是自由閱讀 826評(píng)論 0 48