2016-11-04 9 views
0

こんにちは私は一意の文字列のセットを持つアプリケーションを開発しています。 NSMutableSetの項目を追加、削除、変更する機能があります。Swift NSMutableSetの変更を観察するための3 KVO(追加、削除、変更項目)

override func viewDidLoad() { 
     super.viewDidLoad() 

     addObserver(self, forKeyPath: #keyPath(barCodeSet), options: [.old,.new,.initial], context: nil) 

    } 
:私は私が守っ追加セットが(項目を追加、削除、変更)に変更している時はいつでも viewDidloadに私のコードここ

観察する

dynamic var barCodeSet = NSMutableSet() 

をKVO(キー値オブザーバ)を使用したいです

そして、これは私の観察機能です:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
     if keyPath == #keyPath(barCodeSet) { 
      print(barCodeSet.count) 
      for barcode in barCodeSet { 
       print(barcode) 
      } 
     } 
    } 

KVOが動作していない理由を知ってはいけませんing。設定項目が変更されたときに通知を受け取れるように、コードを変更する方法を知っている人はいますか?ありがとう

+0

http://stackoverflow.com/questions/6403570/key-value-observing-an-nsmutableset –

答えて

1

NSMutableSetを使用する必要がないと仮定すると、変数宣言でdidSet節を使用できます。遊び場に次のようにしてみてください:あなたはbarCodeSetの値を設定するたびに

import UIKit 

class myClass { 

    init() { 

    } 

    dynamic var barCodeSet: Set<String> = Set<String>() { 
     didSet { 
      print(barCodeSet.count) 
      for barcode in barCodeSet { 
       print(barcode) 
      } 
     } 
    } 
} 

let thisClass = myClass() 

thisClass.barCodeSet = ["Apples", "Bananas", "Oranges"] 
thisClass.barCodeSet.insert("Grapes") 

、その数と内容がコンソールに出力されています。

+0

の重複の可能性があります.Deadsetが配列またはセットで機能しないようです。例えば、 –

+0

に新しいアイテムを追加する場合Swift Setを使用する場合、たとえばに設定します。 NSMutableSetを使用する必要がありますか? – Sparky

+0

サーバーに新しいデータがある場合は、セットに一意のアイテムタイプの文字列を追加する必要があります。この作業にSet を使用できますか? –

関連する問題