[SWIFT3] - Mise à jour Interface <-> Base de données
Bonjour à tous,
J'utilise un programme de gestion d'une collection que j'ai développé en Objective C sur Mac.
J'utilise le Framework FMDB pour gérer la base.
Pour me former à Swift et aux Storyboard, je tente de réécrire mon logiciel en Swift.
J'ai passé du temps sur les Storyboards et cela commence à prendre forme.
Je galère sur la communication entre l'interface et la base de données : j'utilisais les bindings et la gestion des notifications pour mettre à jour les tables de la base de donnée à partir d'une méthode unique d'update.
Je cherche un moyen simple de faire ce type de mise à jour bi-directionnel, en Swift, sans devoir écrire plein de code.
Hélas, je ne trouve pas comment réaliser simplement ces fonctionnalités (pourtant basique avec une base de donnée), en Swift !
J'ai regardé le Framework Bound, le KVO en Swift, mais je ne trouve pas comment réaliser cette communication entre l'interface et la base de donnée.
Si vous avez une solution simple et des exemples, merci d'avance pour vos pistes .
Eric
Réponses
Oups !
Le nom du Framework regardé est "ReactiveKit/Bond" et non pas "Bound" !
La framework ReactiveKit sert à faire de la programmation réactive en Swift. Elle a deux autres concurrents bien plus populaires: Reactive Cocoa et surtout RxSwift.
Mon avis est que la programmation réactive est complexe, voire compliquée. Basculer vers cet univers est intéressant et enrichissant mais pas anodin. Cela exige une bonne expérience de Swift et de la programmation fonctionnelle. Et rien n'est magique: il faut connaà®tre beaucoup de concepts et écrire encore beaucoup de code pour interfacer les différents composants.
Si tu veux juste porter ton ancien programme qui utilisait les KVO, alors tu peux toujours avec Swift de base. Tant que les objets Swift héritent de NSObject, le KVO fonctionne.
Je ne sais pas s'il t'intéresse ou non, mais j'ai écrit une série d'articles sur quelque chose qui ressemble les bindings de MacOS :
Merci pour vos réponses.
Je suis effectivement en train de regarder KVO, mais les discussions sur le sujet ne me semblait pas toujours très claires sur les autres forums.
Je suis tombé sur ce fil ( point 41) https://stackoverflow.com/questions/24175626/adding-observer-for-kvo-without-pointers-using-swift/24627141
Mon besoin est juste de rendre en compte les actions sur les objets de l'écran (NSTextField par exemple) pour mettre à jour ma base.
Pour l'instant, cela ne marche pas chez moi (mon anglais est plutôt limité !) .
Je trouve que les exemples donnés sont souvent trop compliqués pour expliquer des choses très simples.
Je viens d'essayer avec un petit projet en Swift et je n'avais aucun problème en utilisant les bindings. La seule condition, c'est que tous les types et propriétés soient compatibles avec Objective-C : NSObject, NSCopying, etc.
Les types Swift comme Array, String, etc se convertissent automatiquement.
e.g.
Merci pour cet exemple simple, comme j'aime bien :-*
Je regarderai ça ce week-end
Le keywork "dynamic" apporte quoi dans ton cas ?
C'est nécessaire en Swift pour que les vars appellent le mécanisme de KVO. Sinon, on n'est pas notifié des changements des vars.
J'ai fait, en plus, un exemple pour connecter un Array par moyen d'un NSArrayController à un NSTableView si tu avais les difficultés.
Je veux bien un exemple de plus : c'est toujours bon de regarder le code des autres
Bien mais, là tu seras déçu. Aucune ligne de code, c'est tout dans les bindings en IB
Ah ok d'ac, merci !
Exemple pour array :