watchkit – WCSessionDelegate:sessionDidBecomeInactive和sessionDidDeactivate已被标记为不可用,但是是必需的

我刚刚使用 Xcode 8的转换功能Swift 2应用程序转换为 Swift 3.

我的代码一个标记为WCSessionDelegate的类.

在Swift 2中,它编译时没有使用sessionDidBecomeInactive和sessionDidDeactivate方法.

如果我编译Swift 3版本,编译器会抱怨我的类不符合协议WCSessionDelegate,这显然是正确的.
然后它提供插入两个函数的存根:

public func sessionDidBecomeInactive(_ session: WCSession) { }  
public func sessionDidDeactivate(_ session: WCSession) { }

插入这些存根后,会报告以下错误

Cannot override 'sessionDidBecomeInactive' which has been marked unavailable  
Cannot override 'sessionDidDeactivate' which has been marked unavailable

我该如何解决这个问题?

因为在watchOS上将委托方法sessionDidDeactivate和sessionDidBecomeInactive标记为不可用,所以您将使编译器忽略共享类中的那些代码片段.您可以使用以下预处理器宏执行此操作:
#if os(iOS)
public func sessionDidBecomeInactive(_ session: WCSession) { }  
public func sessionDidDeactivate(_ session: WCSession) {
    session.activate()
}
#endif

还请注意我在sessionDidDeactivate调用添加了activate调用.这是当用户一个配对的手表切换到第二个配对的手表时重新激活手机上的会话.像这样调用它假设您没有其他线程/代码的一部分需要在切换发生之前给出时间.有关支持快速切换功能的更多信息,请查看Apple sample code

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...