Swift利用KVO監(jiān)聽數(shù)組元素的變化

一.概述
KVO,即:Key-Value Observing睡雇,它提供一種機(jī)制,當(dāng)指定的對象的屬性被修改后,則對象就會接受到通知。簡單的說就是每次指定的被觀察的對象的屬性被修改后魔种,KVO就會自動通知相應(yīng)的觀察者了缩麸。

二.使用的步驟
1.注冊仿村,指定被觀察者和觀察的對象

   objectToObserve.addObserver(self, forKeyPath: "contentArray", options: .new, context: &myContext)

2.實(shí)現(xiàn)屬性變化的回調(diào)

  override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if context == &myContext {

       } else {
            super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
        }
    }

3.移除觀察

   deinit {
        objectToObserve.removeObserver(self, forKeyPath: "contentArray", context: &myContext)
    }

三.完整的代碼

@objcMembers class MyObjectToObserve: NSObject {
    dynamic var contentArray = [String]()
}
private var myContext = 0
class PlaySpeechString: NSObject,AVSpeechSynthesizerDelegate {
    static let shared = PlaySpeechString()
    var objectToObserve = MyObjectToObserve()

    // Make sure the class has only one instance
    // Should not init or copy outside
    private override init() {
        super.init()
        objectToObserve.addObserver(self, forKeyPath: "contentArray", options: .new, context: &myContext)
    }
    
    override func copy() -> Any {
        return self // SingletonClass.shared
    }
    
    override func mutableCopy() -> Any {
        return self // SingletonClass.shared
    }
    
    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if context == &myContext {

        } else {
            super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
        }

    }

    deinit {
        objectToObserve.removeObserver(self, forKeyPath: "contentArray", context: &myContext)
        }
    }

注意:
1.被觀察屬性所在的類需要用 @objcMembers 關(guān)鍵字修飾 要不會報(bào)error
fatal error: Could not extract a String from KeyPath
Swift.ReferenceWritableKeyPath
2.被觀察的屬性需要用dynamic修飾,否則也無法觀察到。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市侮穿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毁嗦,老刑警劉巖亲茅,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異金矛,居然都是意外死亡芯急,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門驶俊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人免姿,你說我怎么就攤上這事饼酿。” “怎么了胚膊?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵故俐,是天一觀的道長。 經(jīng)常有香客問我紊婉,道長药版,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任喻犁,我火速辦了婚禮槽片,結(jié)果婚禮上何缓,老公的妹妹穿的比我還像新娘。我一直安慰自己还栓,他們只是感情好碌廓,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著剩盒,像睡著了一般谷婆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辽聊,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天纪挎,我揣著相機(jī)與錄音,去河邊找鬼跟匆。 笑死廷区,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贾铝。 我是一名探鬼主播隙轻,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼垢揩!你這毒婦竟也來了玖绿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤叁巨,失蹤者是張志新(化名)和其女友劉穎斑匪,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锋勺,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚀瘸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了庶橱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贮勃。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖苏章,靈堂內(nèi)的尸體忽然破棺而出寂嘉,到底是詐尸還是另有隱情,我是刑警寧澤枫绅,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布泉孩,位于F島的核電站,受9級特大地震影響并淋,放射性物質(zhì)發(fā)生泄漏寓搬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一县耽、第九天 我趴在偏房一處隱蔽的房頂上張望句喷。 院中可真熱鬧镣典,春花似錦、人聲如沸脏嚷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽父叙。三九已至神郊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間趾唱,已是汗流浹背涌乳。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留甜癞,地道東北人夕晓。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像悠咱,于是被迫代替她去往敵國和親蒸辆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359

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

  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,160評論 30 470
  • 設(shè)計(jì)模式 1.delegate和notification什么區(qū)別析既,什么情況使用? 2.描述一下KVO和KVC躬贡。 K...
    丶逐漸閱讀 1,958評論 3 2
  • 一、深復(fù)制和淺復(fù)制的區(qū)別眼坏? 1拂玻、淺復(fù)制:只是復(fù)制了指向?qū)ο蟮闹羔槪磧蓚€指針指向同一塊內(nèi)存單元宰译!而不復(fù)制指向?qū)ο蟮?..
    iOS_Alex閱讀 1,385評論 1 27
  • Key-Value Observing機(jī)制 知識點(diǎn)介紹 Key-Value Observing (簡寫為KVO):...
    此生浮華祇盼伊亽閱讀 1,225評論 0 3
  • 本文結(jié)構(gòu)如下: Why? (為什么要用KVO) What? (KVO是什么) How? ( KVO怎么用) Mo...
    等開會閱讀 1,653評論 1 21