类不符合NSObjectProtocol

da1*_*bi3 109 class swift

我得到一个错误,我的班级不符合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]) {
    }
}
Run Code Online (Sandbox Code Playgroud)

Sul*_*han 237

请参阅为什么在swift中我们不能在没有继承NSObject类的情况下采用协议?

简而言之,WCSessionDelegate它本身也是继承的,NSObjectProtocol你也需要在该协议中实现方法.实现这些方法的最简单方法是子类NSObject:

class BatteryLevel: NSObject, WCSessionDelegate
Run Code Online (Sandbox Code Playgroud)

请注意,您在此处理Obj-C API.

  • 总是简单的答案很难找到!谢谢你的简单回答:) (5认同)
  • 只需确保您不要尝试在该类扩展中子类化“NSObject”,而是在类声明本身中子类化。 (5认同)
  • 当我这样做时,我得到“从非协议类型'NSObject'继承” (2认同)