[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 :D  .


 


Eric 


Réponses

  • Oups !


     


    Le nom du Framework regardé est "ReactiveKit/Bond" et non pas "Bound" !


  • CéroceCéroce Membre, Modérateur

    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.


  • Joanna CarterJoanna Carter Membre, Modérateur

    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. B)

  • Joanna CarterJoanna Carter Membre, Modérateur
    août 2017 modifié #6

    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





  • public class Test : NSObject
    {
    dynamic var name: String?
    {
    didSet
    {
    print(name ?? "nil")
    }
    }
    }



     


    Le keywork "dynamic" apporte quoi dans ton cas ?

  • Joanna CarterJoanna Carter Membre, Modérateur


    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.

  • Joanna CarterJoanna Carter Membre, Modérateur


    Merci pour cet exemple simple, comme j'aime bien  :-*


    Je regarderai ça ce week-end




     


    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



  • Joanna CarterJoanna Carter Membre, Modérateur


    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 :)


  • 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.




     


    Ah ok d'ac, merci  ! 

  • Joanna CarterJoanna Carter Membre, Modérateur

    Exemple pour array :


     


Connectez-vous ou Inscrivez-vous pour répondre.