watchkit – WCSessionDelegate:sessionDidBecomeInactive和ses
发布时间:2020-12-14 05:28:30 所属栏目:百科 来源:网络整理
导读:我刚刚使用 Xcode 8的转换功能将 Swift 2应用程序转换为 Swift 3. 我的代码有一个标记为WCSessionDelegate的类. 在Swift 2中,它编译时没有使用sessionDidBecomeInactive和sessionDidDeactivate方法. 如果我编译Swift 3版本,编译器会抱怨我的类不符合协议WCSe
我刚刚使用
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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |