watchOS 3 getSupportedTimeTravelDirections
watchOS 3 getSupportedTimeTravelDirections
我正在尝试将我的 watchOS 2 应用程序更新到 watchOS 3。不幸的是,我不明白我在 ComplicationController 方面做错了什么。我总是收到以下错误(使用 Xcode 8 b6):
Type 'ComplicationController' does not conform to protocol 'CLKComplicationDataSource'
Candidate has non-matching type '(CLKComplication, (CLKComplicationTimeTravelDirections) -> Void) -> ()'
代码:
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 中关于此功能的变化吗?
变了!
func getSupportedTimeTravelDirections(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimeTravelDirections) -> Void) {
handler([.forward, .backward])
}
注意@escaping 注释。
Swift 3.0 要求我们将闭包显式标记为 'escaping' 如果它们能够逃脱函数体的范围 - 例如,如果它们可以被复制到 属性.
来自 Xcode 8 beta 6 发行说明:
Closure parameters are non-escaping by default, rather than explicitly being annotated with @noescape. Use @escaping to indicate that a closure parameter may escape.
如果您在 Xcode 8 beta 6 中创建了一个新的 ComplicationController.swift 项目,生成的源代码现在如下所示:
func getSupportedTimeTravelDirections(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimeTravelDirections) -> Void) {
handler([.forward, .backward])
}
此更改适用于具有处理程序参数的每个数据源方法。
我正在尝试将我的 watchOS 2 应用程序更新到 watchOS 3。不幸的是,我不明白我在 ComplicationController 方面做错了什么。我总是收到以下错误(使用 Xcode 8 b6):
Type 'ComplicationController' does not conform to protocol 'CLKComplicationDataSource' Candidate has non-matching type '(CLKComplication, (CLKComplicationTimeTravelDirections) -> Void) -> ()'
代码:
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 中关于此功能的变化吗?
变了!
func getSupportedTimeTravelDirections(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimeTravelDirections) -> Void) {
handler([.forward, .backward])
}
注意@escaping 注释。
Swift 3.0 要求我们将闭包显式标记为 'escaping' 如果它们能够逃脱函数体的范围 - 例如,如果它们可以被复制到 属性.
来自 Xcode 8 beta 6 发行说明:
Closure parameters are non-escaping by default, rather than explicitly being annotated with @noescape. Use @escaping to indicate that a closure parameter may escape.
如果您在 Xcode 8 beta 6 中创建了一个新的 ComplicationController.swift 项目,生成的源代码现在如下所示:
func getSupportedTimeTravelDirections(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTimeTravelDirections) -> Void) {
handler([.forward, .backward])
}
此更改适用于具有处理程序参数的每个数据源方法。