在 Swift 中更改 guard 语句中的变量?

Change variables in guard statement in Swift?

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

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)

这里不用守卫。如果 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

}