1

我目前有警卫声明:

 guard let designationQuota = Defaults.quotas.value?.designationQuota, designationQuota > 0 else {
      return AppDelegate.shared.presentNoDesignationQuotaWarning()
 }

但是我只想在变量needsQuota == true. 我想跳过守卫语句 if needsQuota == false。有没有比带有返回的 if 语句更好的方法呢?

编辑:

如何将其简化为单个守卫?

if needsQuota {
  guard let designationQuota = Defaults.quotas.value?.designationQuota, designationQuota > 0 else {
      return AppDelegate.shared.presentNoDesignationQuotaWarning()
   }
}
4

3 回答 3

1

怎么样 :

guard !needsQuota ||
    (Defaults.quotas.value?.designationQuota.map { $0 > 0 } == true) else {
    return AppDelegate.shared.presentNoDesignationQuotaWarning()
}
于 2019-01-10T11:48:42.987 回答
1

if问题是,如果您的条件失败或失败,您希望以不同的方式继续执行guard,因此您不能真正将它们组合成一个guard. 但是,您可以通过将条件的否定版本放在语句中来将这两个条件组合成一个if语句。guardif

if needsQuota && (Defaults.quotas.value?.designationQuota ?? 0 <= 0) {
    return AppDelegate.shared.presentNoDesignationQuotaWarning()
}
于 2019-01-10T11:57:51.090 回答
0

这难道不是诀窍吗?

guard needsQuota, let designationQuota = Defaults.quotas.value?.designationQuota, designationQuota > 0 else {
    return AppDelegate.shared.presentNoDesignationQuotaWarning()
}
于 2019-01-10T15:12:11.577 回答