编译器不喜欢完成处理程序内的guard语句

时间:2017-03-04 22:09:14

标签: swift syntax compiler-errors

我正在摸着这个。编辑不喜欢它,编译器更喜欢它 - 但他们不同意原因。

            cardRemoveTimer = Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true, block: { [weak self] (_) in
                guard  let self = self else {
                    return
                }
//…
}

XCode编辑器: 条件中的模式匹配需要'case'关键字

CardDeck.swift:31:28:无法转换'CardDeck'类型的值?预期的参数类型'_OptionalNilComparisonType'

我所要做的就是避免被迫展开自我。为什么我不能?如果我可以,怎么样?

1 个答案:

答案 0 :(得分:0)

我认为真正的问题是使用self作为变量名称。 self是Swift中的保留关键字,因此请使用其他内容,可能是uself

cardRemoveTimer = Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true) { [weak self] _ in
    guard let uself = self else { return }

    // use uself
}

注意:您可以使用反引号(``)包围self以将其用作变量名称,但我不推荐它,因为您有在你使用它的任何地方都这样做。使用另一个变量名更容易。