2017-03-04 17 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