-1
votes

Swift, comment puis-je partager l'API Résultat dans tout mon application?

Je dois demander à une API, pour obtenir: les données utilisateur, l'utilisateur suivant, suivi des utilisateurs. Ce sont 3 API différentes. J'ai besoin de les appeler toutes les minutes. Je mets cette partie du code dans mon application délégué et je n'ai aucun problème avec cela. Mais j'ai besoin de rafraîchir le ViewController L'utilisateur y est déjà, chaque fois que de nouvelles informations obtiennent du serveur. J'ai besoin de quelque chose comme rxswift pour vous abonner pour de nouvelles données et mettre à jour la vue lorsque de nouvelles données sont disponibles. Mais je ne sais pas comment le faire.Parce que mon appel API est dans l'application délégué et que l'utilisateur peut être dans n'importe quel ViewController . .


0 commentaires

3 Réponses :


2
votes

Je ne connais pas RX Swift, mais ce que vous décrivez est un classique NotificationCenter A > Utilisez cas.
Je voudrais post code> une notification à l'aide du notification code> et de l'abonner à celui-ci dans mes contrôleurs de vue.
KVO est une autre façon d'aller, mais J'irais avec des notifications, étant donné le scénario que vous avez décrit.

Exemple: P>

// This class does the API stuff
class MyClass{

    static let myNotification = Notification.Name("com.mycompany.intersting-notification")

    func apiCall(){
        NotificationCenter.default.post(name: MyClass.myNotification, object: "Hello!")

    }
}

// in your view controller
override func viewDidLoad() {
    super.viewDidLoad()
    NotificationCenter.default.addObserver(forName: MyClass.myNotification, object: nil, queue: nil) { (notification) in
        if let str = notification.object as? String {
            print("Somebody sent us this: \(str)!")
        }
    }
}


0 commentaires

1
votes

Vous pouvez utiliser NotificationCenter comme ci-dessous. Aussi, vous pouvez utiliser délégués , ici est un bon blog concernant NotificationCenter Blog . J'espère que cela aidera.

// In viewWillAppear
override func viewWillAppear(_ animated: Bool) {
    NotificationCenter.default.addObserver(self, 
  selector:#selector(GetApiDetails), name: 
  NSNotification.Name(rawValue: "GetApiDetails"), object: nil)
}
 // In viewWillDisappear

 override func viewWillDisappear(_ animated: Bool) {
        NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "GetApiDetails"), object: nil)
}

// Get/Use your related api result in this function
@objc   func GetApiDetails(notification: NSNotification){
// do your stuff here
}

// Now Call UserNotification Center method in your appdelegate file in a method and pass the values if you want to in your object like array or dictionary or according to your convenience.
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "GetApiDetails"), object: nil)


0 commentaires

1
votes

Si vous devez informer N des instances sur la réponse de l'API, vous pouvez utiliser notificationCenter ou kvo et si vous avez besoin, c'est seulement pour Accédez au résultat de l'API à travers l'application, vous pouvez utiliser singleton (si les données sont temporairement requises) ou Stockage de persistance (si les données doivent être stockées en permanence) telles que nsuserdefaults , sqlite ou coredata

exemple par @moshebe gottlieb xxx


0 commentaires