我正在使用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上,我无法顺应方法,我对如何解决这个问题感到困惑。令我感到困惑的是,错误声称我不符合协议就会把这个功能放在课堂上......
感谢任何帮助。
答案 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标头...
/** 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