2016-09-21 4 views
1

Ich habe ein Textfeld an einen Swift-Wörterbuchwert über den Schnittstellen-Builder gebunden. Im Textfeld wird der korrekte Wert aus dem Wörterbuch gezogen und im Textfeld angezeigt.Xcode - Textfeld an Element eines Swift-Wörterbuchs binden

Wenn ich den Wert des Elements im dict über

myDict["Textfield1"] = "New value" 

ändern, ist die Änderung in das Textfeld nicht sichtbar. Wenn ich den Wert des Textfelds an eine Eigenschaft einer Klasse binden, wird jede Änderung an dieser Eigenschaft sofort im Textfeld sichtbar. Fehle ich etwas?

Danke!

Antwort

1

Also im Grunde wird es nicht funktionieren. Bindungen funktionieren mit dem KVO/KVN-System, das Benachrichtigungen sendet, wenn Obj-C-Objekte ihren Wert ändern. Es ist sehr schlau, aber sie haben es Swift nicht mitgeteilt. Hinzu kommt, dass Wörterbücher in Swift Werttypen sind.

Die "Lösung" ist sicherzustellen, dass das Ding, an das Sie binden, KVO hat. Es gibt also ein paar Dinge, die Sie tun können. Die erste besteht darin, eine eigene Klasse zu erstellen und von NSObject zu subklassen, und presto, Sie erhalten KVO. Here's a page wie man das macht.

Aber der bessere Weg ist, das dynamic Schlüsselwort auf Ihrer Swift-Sammlung zu verwenden, . Dies löst die Überbrückung in Obj-C aus, und Sie erhalten KVO. Jetzt habe ich das nicht mit einem Swift-Diktat benutzt, also bin ich mir nicht ganz sicher, was passieren wird. Möglicherweise müssen Sie das ein NSDictionary machen. Aber es ist eine kleine Änderung, also geben Sie dynamic einen Versuch!

+0

Die dynamische ANS-Unterklasse von NSObject hat den Trick gemacht. Nach ein paar Monaten mit Swift scheint es, dass es für Apple so viel zu tun gibt, bis die Objc-Unterstützung fallengelassen werden kann. Danke für deine Hilfe! –

+0

Mein Vergnügen. Und wenn es an der Zeit ist, sich etwas einfallen zu lassen, verwenden Sie https://github.com/ReactiveKit/ReactiveKit –

Verwandte Themen