Zaviedol som textové pole do hodnoty slovníka Swift pomocou nástroja Builder rozhrania. V textovom poli sa zo slovníka vyberie správna hodnota a zobrazí sa v textovom poli.
Keď zmením hodnotu elementu v dictu cez
myDict["Textfield1"] = "New value"
zmena nie je viditeľná v textovom poli. Keď priradím hodnotu textového poľa k vlastnosti triedy, akúkoľvek zmenu tejto vlastnosti okamžite vidíte v textovom poli. Uniká mi niečo?
Vďaka!
odpovede:
1 pre odpoveď č. 1Takže v podstate to nebude fungovať. Väzby pracujú pomocou systému KVO / KVN, ktorý vysiela upozornenia, keď objekty Obj-C menia svoju hodnotu. Je to veľmi chytré, ale neprišli to k Swiftovi. Ak to chcete pridať, slovníky Swift sú typy hodnôt.
"Riešením" je zabezpečiť, aby vec, s ktorou sa viažete, má KVO. Existuje niekoľko vecí, ktoré môžete urobiť. Prvým je vytvoriť si vlastnú triedu a podtriedu NSObject
, a presto, dostanete KVO. Tu je stránka ako to urobiť.
Ale lepším spôsobom je použiť dynamic
kľúčové slovo v kolekcii Swift, myDict
, Toto spúšťa premostenie do Obj-C a dostanete KVO. Teraz som to nepoužíval s Swiftovým dictom, takže som si úplne istý, čo sa stane. Možno budete musieť urobiť myDict
a NSDictionary. Ale je to jedna menšia zmena, tak určite dať dynamic
vyskúšajte!