2016-09-21 6 views
1

インタフェースビルダーを介してテキストフィールドをSwift辞書値にバインドしました。テキストフィールドでは、正しい値が辞書から引き出され、テキストフィールドに表示されます。Xcode - Swift辞書の要素にテキストフィールドをバインドする

Iは

myDict["Textfield1"] = "New value" 

介して辞書内の要素の値を変更する変更がテキストフィールドに表示されません。 テキストフィールドの値をクラスのプロパティにバインドすると、このプロパティの変更がテキストフィールドに即座に表示されます。 何か不足していますか?

ありがとうございます!

答えて

1

基本的には動作しません。バインディングは、Obj-Cオブジェクトが値を変更したときに通知を送信するKVO/KVNシステムを使用して動作します。それは非常に賢いですが、彼らはそれをSwiftに移植しませんでした。それに加えて、Swiftの辞書は値型です。

「解決策」は、バインドするものにKVOが含まれていることを確認することです。だから、あなたができることがいくつかあります。最初は独自のクラスを作成し、サブクラスをNSObjectからサブクラス化し、KVOを取得します。それを行う方法についてHere's a page

しかし、より良い方法は、SwiftコレクションのdynamicキーワードをmyDictに使用することです。これはObj-Cへのブリッジを引き起こすので、KVOを取得します。今私はこれをSwift dictで使っていないので、何が起こるか完全にはわからない。 NSDictionaryをmyDictにする必要があるかもしれません。しかし、それは1つのマイナーチェンジですので、間違いなくdynamicを試してみてください!

+0

NSObjectからの動的ansサブクラス化を使用することは、そのトリックを行いました。スウィフトで数ヶ月後には、objcのサポートが落とされるまでリンゴのために行うべきことがたくさんあるようです:)助けてくれてありがとう! –

+0

私の喜び。そして、それが夢中になるときは、https://github.com/ReactiveKit/ReactiveKit –

関連する問題