2017-03-04 15 views
0

我正在摸索着这个问题。编辑不喜欢它,编译器甚至更喜欢它 - 但他们不同意某个原因。编译器不喜欢完成处理程序内部的守护语句

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

的XCode编辑: 在状态模式匹配要求“案例”关键字

CardDeck.swift:31:28: '?CardDeck' 无法将类型的价值到期望的参数类型'_OptionalNilComparisonType'

我想要做的就是避免强制展开自我。为什么我不能?如果可以的话,怎么样?

回答

0

我认为真正的问题是使用self作为变量名。 self是斯威夫特是一个保留关键字,所以用别的东西,也许uself

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

    // use uself 
} 

注:可以围绕self与反引号(``)使用它作为一个变量的名字,但我不会推荐它,因为在任何地方你都必须这样做。只使用另一个变量名更简单。

+0

好的。我会标记它的答案。但我仍然认为代码应该是有效的。 (就像为什么'self'是一个不能使用的特殊变量名字一样......) – Mozahler

+1

@Mozahler如果你在你的代码中用反引号括起来,你当然可以使用'self',也就是'''self'' '。但这不是一个很好的设计选择,你需要在你使用它的地方使用反引号。 –

+1

'self'是一个具有特殊含义的Swift关键字。你可以用它作为一个通用的变量名,用反引号包围它,但我不会推荐它。 – vacawama