web-dev-qa-db-fra.com

La classe n'est pas conforme à NSObjectProtocol

Je reçois un message d'erreur indiquant que ma classe ne se conforme pas à NSObjectProtocol. Je ne sais pas ce que cela signifie. J'ai implémenté toutes les fonctions de la WCSessionDelegate, ce n'est donc 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]) {
    }
}
95
da1lbi3

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 et vous devez donc également implémenter des méthodes dans ce protocole. Le moyen le plus simple d'implémenter ces méthodes consiste à sous-classer NSObject:

class BatteryLevel: NSObject, WCSessionDelegate

Notez que vous traitez avec les API Obj-C ici.

215
Sulthan