114 votes

La classe ne se conforme pas au protocole NSObjectProtocol

Je reçois une erreur indiquant que ma classe n'est pas conforme au NSObjectProtocol, je ne sais pas ce que cela signifie. J'ai implémenté toutes les fonctions du WCSessionDelegate donc ce n'est pas le problème. Quelqu'un sait-il quel est le problème ? Merci !

import Foundation
import WatchConnectivity

class BatteryLevel: WCSessionDelegate {

    var session: WCSession? {
        didSet {
            if let session = session {
                session.delegate = self
                session.activate()
            }
        }
    }

    var batteryStatus = 0.0;

    func getBatteryLevel(){
        if WCSession.isSupported() {
            // 2
            session = WCSession.default()
            // 3
            session!.sendMessage(["getBatteryLevel": ""], replyHandler: { (response) -> Void in
                if (response["batteryLevel"] as? String) != nil {
                    self.batteryStatus = (response["batteryLevel"] as? Double)! * 100
                }
            }, errorHandler: { (error) -> Void in
                // 6
                print(error)
            })
        }}

    func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
    }

    func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
    }
}

248voto

Sulthan Points 23360

Voir Pourquoi dans swift nous ne pouvons pas adopter un protocole sans hériter d'une classe de NSObject ?

En bref, WCSessionDelegate hérite lui-même de NSObjectProtocol Vous devez donc également mettre en œuvre des méthodes dans ce protocole. La façon la plus simple d'implémenter ces méthodes est de sous-classer la classe NSObject :

class BatteryLevel: NSObject, WCSessionDelegate

Notez que vous avez affaire ici à des API Obj-C.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X