在Swift中更改保护语句中的变量?

时间:2017-01-02 04:24:28

标签: ios swift image var

我有一个如下所示的保护声明,如果结果不正确,我需要更改变量

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
}

这样做会显示真值的gif,但不会显示假值。如果守卫出现错误,我需要它用新值搜索gif名称。我在这做错了什么?

2 个答案:

答案 0 :(得分:3)

这是对guard的不当使用。 guard退出当前范围,您不想这样做;你想继续前进所以只需使用好的if。 (另外,永远不要将Bool与true作为条件进行比较; Bool 是一个条件。)

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)

答案 1 :(得分: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

}