WCSessionDelegate:sessionDidBecomeInactive 和 sessionDidDeactivate 已标记为不可用,但是是必需的
WCSessionDelegate: sessionDidBecomeInactive and sessionDidDeactivate have been marked unavailable, but are required
我刚刚将一个Swift 2 应用程序转换为Swift 3,使用Xcode 8 的转换功能。
我的代码有一个 class 标记为 WCSessionDelegate
。
在 Swift 2 中编译时没有方法 sessionDidBecomeInactive
和 sessionDidDeactivate
。
如果我编译 Swift 3 版本,编译器会抱怨我的 class 不符合协议 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
我该如何解决这个问题?
因为委托方法 sessionDidDeactivate
和 sessionDidBecomeInactive
在 watchOS 上被标记为不可用,您将不得不让编译器忽略共享 class 中的那些代码片段。您可以使用以下预处理器宏来执行此操作:
#if os(iOS)
public func sessionDidBecomeInactive(_ session: WCSession) { }
public func sessionDidDeactivate(_ session: WCSession) {
session.activate()
}
#endif
另请注意,我在 sessionDidDeactivate
调用中添加了 activate
调用。这是为了在用户从一只配对手表切换到第二只配对手表时重新激活 phone 上的会话。像这样调用它假设您的代码中没有其他 threads/part 需要在切换发生之前给定时间。有关支持快速手表切换的更多信息,您应该查看 Apple sample code
我刚刚将一个Swift 2 应用程序转换为Swift 3,使用Xcode 8 的转换功能。
我的代码有一个 class 标记为 WCSessionDelegate
。
在 Swift 2 中编译时没有方法 sessionDidBecomeInactive
和 sessionDidDeactivate
。
如果我编译 Swift 3 版本,编译器会抱怨我的 class 不符合协议 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
我该如何解决这个问题?
因为委托方法 sessionDidDeactivate
和 sessionDidBecomeInactive
在 watchOS 上被标记为不可用,您将不得不让编译器忽略共享 class 中的那些代码片段。您可以使用以下预处理器宏来执行此操作:
#if os(iOS)
public func sessionDidBecomeInactive(_ session: WCSession) { }
public func sessionDidDeactivate(_ session: WCSession) {
session.activate()
}
#endif
另请注意,我在 sessionDidDeactivate
调用中添加了 activate
调用。这是为了在用户从一只配对手表切换到第二只配对手表时重新激活 phone 上的会话。像这样调用它假设您的代码中没有其他 threads/part 需要在切换发生之前给定时间。有关支持快速手表切换的更多信息,您应该查看 Apple sample code