《Swift學(xué)習(xí)筆記》13 - 屬性的簡(jiǎn)單介紹

介紹:Swift 語言由蘋果公司在 2014 年推出津函,用來撰寫 Mac OS 和 iOS 應(yīng)用程序帚桩,并且Swift還是開源的,開源地址:https://github.com/apple/swift,同時(shí)附上官方博客地址:https://swift.org
目前Swift已經(jīng)發(fā)展到了第五版本芦昔。顯然蘋果大有推翻 OC “江山”的意思.
今天就來初探一下Swift,看看究竟為何swift有這么大的能力娃肿。
參考內(nèi)容:
Swift中文
YungFan老師

swift

一咕缎、屬性相關(guān)使用

1. 存儲(chǔ)屬性
  • 存儲(chǔ)屬性只能由結(jié)構(gòu)體定義。
  • 存儲(chǔ)屬性和計(jì)算屬性通常和特定類型的實(shí)例相關(guān)聯(lián)料扰。
  • 存儲(chǔ)屬性要么是變量存儲(chǔ)屬性(由 var 關(guān)鍵字引入)要么是常量存儲(chǔ)屬性(由 let 關(guān)鍵字引入)凭豪。
// 存儲(chǔ)屬性
class className {
    let name = "Swift"
    var sex = "男"
    var age = 23
} 

當(dāng)中的 name sex age都是存儲(chǔ)屬性 ,一般情況下用 var 關(guān)鍵字定義計(jì)算屬性——包括只讀計(jì)算屬性——為變量屬性晒杈,因?yàn)樗鼈兊闹挡皇枪潭ǖ?/code>嫂伞。

2. 讀取和設(shè)置存儲(chǔ)屬性

通過點(diǎn)語法實(shí)現(xiàn)

  • 當(dāng)定義的屬性用 let 修飾 那么為不可變的 就 不可以給其賦值
  • 在結(jié)構(gòu)體實(shí)例化的時(shí)候 如果用 let 修飾 那么,其所有的屬性都不可以進(jìn)行賦值操作, 不論實(shí)現(xiàn)是用 let 還是 var 修飾的
// 實(shí)例化對(duì)象
let swiftName = className()
//swiftName.name = "123" 
swiftName.sex = "女"
print(swiftName.sex) // 女

// 結(jié)構(gòu)體
struct structName{
    var name = "swift"
    var sex = "男"
}
// 用 let 修飾
let otherSwiftName = structName(name: "Swift", sex: "21")
//otherSwiftName.name = "123" // 會(huì)報(bào)錯(cuò)!
3. 延遲存儲(chǔ)屬性 懶加載屬性
  • 延遲存儲(chǔ)屬性的初始值在其第一次使用時(shí)才進(jìn)行計(jì)算帖努。
  • 你可以通過在其聲明前標(biāo)注 lazy 修飾語來表示一個(gè)延遲存儲(chǔ)屬性撰豺。
  • OC中通過重寫getter方法去實(shí)現(xiàn)
  • 你必須把延遲存儲(chǔ)屬性聲明為變量(使用 var 關(guān)鍵字),因?yàn)樗某跏贾悼赡茉趯?shí)例初始化完成之前無法取得拼余。常量屬性則必須在初始化完成之前有值污桦,因此不能聲明為延遲。
class className2 {
    let name = "Swift"
    lazy var sex = "男"
    var age = 23
}

print(className2())

注意: lazy修飾的屬性 同時(shí)被多個(gè)線程訪問并且屬性還沒有被初始化姿搜,則無法保證屬性只初始化一次寡润。

4. 計(jì)算屬性

計(jì)算屬性實(shí)際并不存儲(chǔ)值。相反舅柜,他們提供一個(gè)讀取器和一個(gè)可選的設(shè)置器來間接得到和設(shè)置其他的屬性和值梭纹。

// 計(jì)算屬性
class student {
    var name: String = ""
    var chineseScore : Double = 0.0
    var mathScore : Double = 0.0
    // 計(jì)算屬性
    var averageScore : Double {
        get {
           return (chineseScore + mathScore) / 2.0
        }
//        set(newAverageScore) {
//            //self.averageScore = newAverageScore
//            self.averageScore = newValue
//        }
        //簡(jiǎn)寫 set 
        set {
            //self.averageScore = newAverageScore
            self.averageScore = newValue
        }
    }
    
}

student().averageScore

let studentClass = student()

studentClass.chineseScore = 10.0
studentClass.mathScore = 12.0
print(studentClass.averageScore)


// 只讀計(jì)算屬性
class student2 {
    var name: String = ""
    var chineseScore : Double = 0.0
    var mathScore : Double = 0.0
    // 計(jì)算屬性
    var averageScore : Double {
        get {
            return (chineseScore + mathScore) / 2.0
        }
    }
}

let student2Class = student2()
//student2Class.averageScore = 2;
5. 屬性觀察者
  • 通過 willsetdidset 方法來實(shí)現(xiàn)

    • willSet 會(huì)在該值被存儲(chǔ)之前被調(diào)用。
    • didSet 會(huì)在一個(gè)新值被存儲(chǔ)后被調(diào)用致份。
  • OC中通過重寫Setter方法實(shí)現(xiàn)

  • 如果你實(shí)現(xiàn)了一個(gè) willSet 觀察者变抽,新的屬性值會(huì)以常量形式參數(shù)傳遞。你可以在你的 willSet 實(shí)現(xiàn)中為這個(gè)參數(shù)定義名字氮块。如果你沒有為它命名绍载,那么它會(huì)使用默認(rèn)的名字 newValue

  • 同樣滔蝉,如果你實(shí)現(xiàn)了一個(gè) didSet 觀察者击儡,一個(gè)包含舊屬性值的常量形式參數(shù)將會(huì)被傳遞。你可以為它命名蝠引,也可以使用默認(rèn)的形式參數(shù)名 oldValue 阳谍。如果你在屬性自己的 didSet 觀察者里給自己賦值,你賦值的新值就會(huì)取代剛剛設(shè)置的值螃概。

6. 類型屬性
  • static 關(guān)鍵字來開一類型屬性
  • 對(duì)于類類型的計(jì)算類型屬性矫夯,你可以使用 class 關(guān)鍵字來允許子類重寫父類的實(shí)現(xiàn)。
class SomeClass {
    static var storedTypeProperty = "Some value."
    // 只寫了get方法
    static var computedTypeProperty: Int {
        return 27
    }
    // 只寫了get方法
    class var overrideableComputedTypeProperty: Int {
        return 107
    }
}
  • 類型屬性在類里查詢和設(shè)置吊洼,而不是這個(gè)類型的實(shí)例训貌。
SomeClass.storedTypeProperty = "123"
SomeClass.computedTypeProperty
SomeClass.overrideableComputedTypeProperty
struct AudioChannel {
    static let thresholdLevel = 10
    static var maxInputLevelForAllChannels = 0
    var currentLevel: Int = 0 {
        didSet {
            if currentLevel > AudioChannel.thresholdLevel {
                // cap the new audio level to the threshold level
                currentLevel = AudioChannel.thresholdLevel
            }
            if currentLevel > AudioChannel.maxInputLevelForAllChannels {
                // store this as the new overall maximum input level
                AudioChannel.maxInputLevelForAllChannels = currentLevel
            }
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市冒窍,隨后出現(xiàn)的幾起案子递沪,更是在濱河造成了極大的恐慌,老刑警劉巖超燃,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件区拳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡意乓,警方通過查閱死者的電腦和手機(jī)樱调,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門约素,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人笆凌,你說我怎么就攤上這事圣猎。” “怎么了乞而?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵送悔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我爪模,道長(zhǎng)欠啤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任屋灌,我火速辦了婚禮洁段,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘共郭。我一直安慰自己祠丝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布除嘹。 她就那樣靜靜地躺著写半,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尉咕。 梳的紋絲不亂的頭發(fā)上叠蝇,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音年缎,去河邊找鬼蟆肆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛晦款,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播枚冗,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缓溅,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了赁温?” 一聲冷哼從身側(cè)響起坛怪,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎股囊,沒想到半個(gè)月后袜匿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡稚疹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年居灯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怪嫌,死狀恐怖义锥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情岩灭,我是刑警寧澤拌倍,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站噪径,受9級(jí)特大地震影響柱恤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜找爱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一梗顺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缴允,春花似錦荚守、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至薄料,卻和暖如春敞贡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背摄职。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工誊役, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谷市。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓蛔垢,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親迫悠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鹏漆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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