2017-01-02 7 views
0

私は結果が真でない場合Swiftのguardステートメントの変数を変更しますか?

func setGif() { 
    var animalName = (String(format: "%03d", self.animal.speciesId!)) 
    guard animal.isDefault! == true else { 
     animalName = animalName + "-merg" 
     return 
    } 
    let gif = UIImage(gifName: animalName) 
    self.gifIBO.setGifImage(gif, manager: gifManager) 
    gifIBO.contentMode = UIViewContentMode.center 
} 

はこの方法が偽の1のために真の価値のためのGIF画像を表示しますが、ないそれをやって変更する変数のために必要とする以下のように私はガード文を持っています。ガードが偽になった場合、新しい値でGIF名を検索する必要があります。私はここで間違って何をしていますか?

答えて

3

これは、guardの不適切な使用です。 guardは現在のスコープを終了し、そのスコープを終了したくありません。あなたは続けるつもりです。だから、良い古いifを使用してください。 (また、条件としてtrueにブール値を比較することはありません。ブール条件である)あなたの場合は

if animal.isDefault! { 
    // it's true, do one thing 
} else { 
    // it's false, do a different thing 
} 

、あなたはおそらくifを必要としない:

var animalName = (String(format: "%03d", self.animal.speciesId!)) 
if !(animal.isDefault!) { 
    animalName += "-merg" 
} 
let gif = UIImage(gifName: animalName) 
+0

私はガードを使いたいと思っていました。アプリが大きくなると、それは最終的にif else文に変わり、私がそのガードを読んでいたからです。他の場合は避けるほうが良いです。@matt – user4938361

+0

まあ、そうではありません。そして、あなたはまた、「ガード」は「そうでない場合」と同じであり、それも偽であると考えるように見えます。 – matt

+0

私は参照してください。ありがとうございました! – user4938361

0

する必要はありませんがここでガードを使用してください。また、isDefaultがnilの場合は、animal.isDefault == .some(true)を使用してクラッシュの可能性を減らしてください。

func setGif() { 

    var animalName = (String(format: "%03d", self.animal.speciesId!)) 
    if animal.isDefault == .some(true) else { 
     animalName = animalName + "-merg" 
    } 

    let gif = UIImage(gifName: animalName) 
    self.gifIBO.setGifImage(gif, manager: gifManager) 
    gifIBO.contentMode = .center 

} 
関連する問題