如何优雅地将保护语句与条件结合起来?
Posted
技术标签:
【中文标题】如何优雅地将保护语句与条件结合起来?【英文标题】:How to elegantly combine a guard statement with a condition? 【发布时间】:2019-01-10 11:39:12 【问题描述】:我目前有保护声明:
guard let designationQuota = Defaults.quotas.value?.designationQuota, designationQuota > 0 else
return AppDelegate.shared.presentNoDesignationQuotaWarning()
但是我只有想要在变量needsQuota == true
时执行保护块。如果needsQuota == false
,我想跳过守卫语句。有没有比带有 return 的 if 语句更好的方法呢?
编辑:
如何将其简化为单个守卫?
if needsQuota
guard let designationQuota = Defaults.quotas.value?.designationQuota, designationQuota > 0 else
return AppDelegate.shared.presentNoDesignationQuotaWarning()
【问题讨论】:
什么变量needsQuota
,我在这里缺少什么?
【参考方案1】:
怎么样:
guard !needsQuota ||
(Defaults.quotas.value?.designationQuota.map $0 > 0 == true) else
return AppDelegate.shared.presentNoDesignationQuotaWarning()
【讨论】:
@MartinR Yes :p 这感觉更像是瑜伽姿势【参考方案2】:问题在于,如果您的if
条件失败或guard
失败,您希望以不同的方式继续执行,因此您不能真正将它们组合成一个guard
。但是,您可以通过将您的 guard
条件的否定版本放入 if
语句中,将这两个条件组合成一个 if
语句。
if needsQuota && (Defaults.quotas.value?.designationQuota ?? 0 <= 0)
return AppDelegate.shared.presentNoDesignationQuotaWarning()
【讨论】:
【参考方案3】:这不就行了吗?
guard needsQuota, let designationQuota = Defaults.quotas.value?.designationQuota, designationQuota > 0 else
return AppDelegate.shared.presentNoDesignationQuotaWarning()
【讨论】:
以上是关于如何优雅地将保护语句与条件结合起来?的主要内容,如果未能解决你的问题,请参考以下文章