Swift屬性觀察方法willSet和didSet

Swift-屬性觀察著(willSet和didSet)

屬性觀察者,類似于觸發(fā)器.用來監(jiān)視屬性的除了初始化之外的屬性變化,當(dāng)屬性值發(fā)生改變是可以對此作出響應(yīng).有如下特點

1,不僅可以在屬性值改變后觸發(fā)didSet蒸其,也可以在屬性值改變前觸發(fā)willSet腺毫。

2,給屬性添加觀察者必須要聲明清楚屬性類型吓蘑,否則編譯器報錯惕虑。

3,willSet可以帶一個newName的參數(shù)磨镶,沒有的話溃蔫,該參數(shù)默認(rèn)命名為newValue。

4琳猫,didSet可以帶一個oldName的參數(shù)伟叛,表示舊的屬性,不帶的話默認(rèn)命名為oldValue脐嫂。

5统刮,屬性初始化時紊遵,willSet和didSet不會調(diào)用。只有在初始化上下文之外侥蒙,當(dāng)設(shè)置屬性值時才會調(diào)用暗膜。

6,即使是設(shè)置的值和原來值相同鞭衩,willSet和didSet也會被調(diào)用
使用這兩個方法十分簡單,我們只要在屬性聲明的時候添加對應(yīng)的代碼塊,就可以對設(shè)定的值和已經(jīng)設(shè)置的值進(jìn)行監(jiān)聽了:

class MyClass {
    var date: NSDate {
        willSet {
            let d = date
            print("即將將日期從 \(d) 設(shè)定至 \(newValue)")
        }

        didSet {
            print("已經(jīng)將日期從 \(oldValue) 設(shè)定至 \(date)")
        }
    }

    init() {
        date = NSDate()
    }
}

let foo = MyClass()
foo.date = foo.date.dateByAddingTimeInterval(10086)

// 輸出
// 即將將日期從 2014-08-23 12:47:36 +0000 設(shè)定至 2014-08-23 15:35:42 +0000
// 已經(jīng)將日期從 2014-08-23 12:47:36 +0000 設(shè)定至 2014-08-23 15:35:42 +0000

willSet

在項目中我利用willSet來發(fā)送通知


import UIKit

class XNHeadView: UIView {
    
    private var head: UIView?
    var tableHeadViewHeight: CGFloat = 0 {
        willSet {
            NSNotificationCenter.defaultCenter().postNotificationName(HomeTableHeadViewHeightDidChange, object: newValue)
            frame = CGRectMake(0, -newValue, ScreenWidth, newValue)
        }
    }
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        head = UIView()
        head!.frame = CGRectMake(0, 0, ScreenWidth, 200)
        
        head?.backgroundColor = UIColor.redColor()
        addSubview(head!)
        
    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    override func layoutSubviews() {
        
        tableHeadViewHeight = CGRectGetMaxY(head!.frame)
    }

}
// ViewController的部分代碼
   NSNotificationCenter.defaultCenter().addObserver(self, selector: .homeTableHeadViewHeightDidChange , name: HomeTableHeadViewHeightDidChange, object: nil)
   
       func homeTableHeadViewHeightDidChange(noti: NSNotification) {
        
        collectionView!.contentInset = UIEdgeInsetsMake(noti.object as! CGFloat, 0, 0, 0)
        collectionView!.setContentOffset(CGPoint(x: 0, y: -(collectionView!.contentInset.top)), animated: false)
        
    }

效果圖:
紅色視圖跟隨collectionView一起滾動,紅色視圖一般是圖片輪播器
<div align = center>


</div>
示例代碼已經(jīng)上傳到Github

didSet

didSet在這里就不詳細(xì)講解了

參考文章

Swift - 屬性觀察者(willSet與didSet)

屬性觀察-swifter.tips

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末学搜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子论衍,更是在濱河造成了極大的恐慌恒水,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饲齐,死亡現(xiàn)場離奇詭異,居然都是意外死亡咧最,警方通過查閱死者的電腦和手機(jī)捂人,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矢沿,“玉大人滥搭,你說我怎么就攤上這事〉肪ǎ” “怎么了瑟匆?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長栽惶。 經(jīng)常有香客問我愁溜,道長,這世上最難降的妖魔是什么外厂? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任冕象,我火速辦了婚禮,結(jié)果婚禮上汁蝶,老公的妹妹穿的比我還像新娘渐扮。我一直安慰自己,他們只是感情好掖棉,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布墓律。 她就那樣靜靜地躺著,像睡著了一般幔亥。 火紅的嫁衣襯著肌膚如雪耻讽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天紫谷,我揣著相機(jī)與錄音齐饮,去河邊找鬼捐寥。 笑死,一個胖子當(dāng)著我的面吹牛祖驱,可吹牛的內(nèi)容都是我干的握恳。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼捺僻,長吁一口氣:“原來是場噩夢啊……” “哼乡洼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起匕坯,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤束昵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后葛峻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锹雏,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年术奖,在試婚紗的時候發(fā)現(xiàn)自己被綠了礁遵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡采记,死狀恐怖佣耐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情唧龄,我是刑警寧澤兼砖,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站既棺,受9級特大地震影響讽挟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜丸冕,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一戏挡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晨仑,春花似錦褐墅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至答捕,卻和暖如春逝钥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拱镐。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工艘款, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留持际,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓哗咆,卻偏偏與公主長得像蜘欲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子晌柬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

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