我有一个如下所示的保护声明,如果结果不正确,我需要更改变量
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名称。我在这做错了什么?
答案 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
}