2017-03-04 21 views
0

私はこの上に私の頭を傷つけています。エディタはそれを気に入らず、コンパイラはそれをあまり好きではありませんが、理由に同意しません。コンパイラは完了ハンドラ内のガードステートメントが好きではありません

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

XCodeのエディタ:28:31:条件に合致する パターンは

CardDeck.swift「ケース」キーワードが必要です '?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

OK。私はそれに答えてマークします。しかし、私はまだコードが有効であるべきだと思います。 (なぜなら、 'self'は使用できない特別な変数名です...) – Mozahler

+1

@Mozahlerあなたがコード内でバッククォートで囲むならば、確かに 'self'を使うことができます。' \ 'self \' '。しかし、それは本当に良いデザインの選択ではなく、あなたがそれを使うたびにバックティックを使う必要があります。 –

+1

'self'は特別な意味を持つSwiftキーワードです。あなたはそれをバッククックで囲むことによって一般的な変数名として使うことができますが、私はそれをお勧めしません。 – vacawama

関連する問題