1. ホーム
  2. swift

[解決済み] クラスがNSObjectProtocolに適合していない [重複]。

2022-05-25 22:08:56

質問

私のクラスはNSObjectProtocolに準拠していないというエラーが出ますが、これはどういう意味でしょうか。私はWCSessionDelegateからすべての関数を実装しているので、それは問題ではありません。どなたか、この問題が何であるかをご存知でしょうか?ありがとうございます!

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]) {
    }
}

どのように解決するのですか?

参照 NSObjectのクラスを継承しないと、なぜswiftではプロトコルを採用できないのでしょうか?

簡単に言うと WCSessionDelegate を継承しているのです。 NSObjectProtocol を継承しているので、そのプロトコルのメソッドも実装する必要があります。これらのメソッドを実装する最も簡単な方法は NSObject :

class BatteryLevel: NSObject, WCSessionDelegate

ここでは、Obj-CのAPIを扱っていることに注意してください。