尝试符合WCSessionDelegate时使用未声明类型错误

时间:2016-09-19 21:04:02

标签: ios swift xcode watchkit xcode8

我正在使用Xcode 8.我也使用Swift 2.3,将遗留构建设置设置为yes。我目前没有迁移到Swift 3。我的应用针对的是iOS 9.3。我的目标是watchOS 2.0。

我有两个符合WCSessionDelegate的类在Xcode 7.3.1中运行得很好。

我查看了苹果文档,发现现在这个协议有必要的方法,即我需要的方法就是这个:

func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, 
   error: Error?)

我收到错误:Use of undeclared type 'Error'

我认为Error是从Swift 3开始引入的?不确定,但由于我在swift 2.3上,我无法顺应方法,我对如何解决这个问题感到困惑。令我感到困惑的是,错误声称我不符合协议就会把这个功能放在课堂上......

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

在Xcode 8中使用Swift 2.3会迫使你做出一些努力,Xcode 8可能会建议使用Swift 3版本的方法模板,Apple不会提供Swift 2版本的参考资料......

要在Swift 2.3中实现委托方法,您需要检查方法的Objective-C版本并思考Swift 2如何自行导入。

session:activationDidCompleteWithState:error:

  

声明

- (void)session:(WCSession *)session 
activationDidCompleteWithState:(WCSessionActivationState)activationState
          error:(NSError *)error;

引用中经常省略可空性注释,因此您最好检查委托的实际.h标头...

WCSession.h

/** Called when the session has completed activation. If session state is WCSessionActivationStateNotActivated there will be an error with more details. */
- (void)session:(WCSession *)session activationDidCompleteWithState:(WCSessionActivationState)activationState error:(nullable NSError *)error __IOS_AVAILABLE(9.3) __WATCHOS_AVAILABLE(2.2);

因此,Swift 2中的方法标题如下:

func session(session: WCSession, activationDidCompleteWithState activationState: WCSessionActivationState, error: NSError?)

如果您不需要在应用中使用新的iOS10 / watchOS3功能,我建议您继续使用Xcode 7与Swift 2配合使用。 (你现在可以提交使用Xcode 7构建的应用程序。)或者你最好将你的应用程序迁移到Swift 3(我知道在很多情况下它可能需要比“一堆努力”更多......)如果你期待Xcode或最新参考的一些帮助。

答案 1 :(得分:0)

要确认swift 2.3 Xcode 8中的EditorTemplates协议,您应该实现以下三种方法:

DisplayTemplates