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

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。如果警卫队出了错,我就需要用新值搜索gif名称。我在这里做错了什么?

最佳答案

这是对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)

关于ios - 在Swift中更改Guard语句中的变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41421323/

10-13 05:55