我试图用复杂的watchOS 3更新我的watchOS 2应用程序。不幸的是,我不明白我在ComplicationController上做错了什么。我总是得到以下错误(使用Xcode 8 b6):
类型'ComplicationController‘不符合协议'CLKComplicationDataSource’候选人的非匹配类型(CLKComplication,(CLKComplicationTimeTravelDirections) -> -> ()‘)
代码:
class ComplicationController: NSObject, CLKComplicationDataSource {
func getSupportedTimeTravelDirections(for complication: CLKComplication, withHandler handler: (CLKComplicationTimeTravelDirections) -> Void) {
handler([.forward])
}
...
}我也试过:
handler(.forward)这两种方法都给了我一个关于watchOS 3的错误,但是在watchOS 2 / Swift 2上工作得很好。有人知道Swift 3在这个函数上发生了什么变化吗?
发布于 2016-08-22 16:59:29
来自Xcode 8 beta 6发行说明:
默认情况下,闭包参数是不转义的,而不是显式地使用@non注释。使用@转义指示闭包参数可能转义。
如果您在Xcode 8 beta 6中创建了一个新的ComplicationController.swift项目,则生成的源代码现在如下所示:
func getSupportedTimeTravelDirections(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimeTravelDirections) -> Void) {
handler([.forward, .backward])
}此更改适用于每个具有处理程序参数的数据源方法。
发布于 2016-08-22 16:59:13
它变了!
func getSupportedTimeTravelDirections(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimeTravelDirections) -> Void) {
handler([.forward, .backward])
}注意@转义注释。
SWIFT3.0要求我们显式地将闭包标记为“转义”,如果它们能够转义函数体的作用域--例如,如果可以将它们复制到属性中。
https://stackoverflow.com/questions/39080834
复制相似问题