当您已经检查 .disabled 中的可选值不为 nil 时,如何避免在 Button 的操作闭包中不必要地展开可选值

问题描述 投票:0回答:1

我有一个

Button
,如果可选值为 nil,则将其设置为禁用:

Button("Enter")
{
    if let selectedCategoryType = self.selectedCategoryType
    {
        //handle button action
    }
    else
    {
        //handle error
    }

    self.dismiss()
}
.disabled(self.selectedCategoryType == nil)

是否有某种方法可以做到这一点,这样当我已经知道它不会为零时,我就不必不必要地打开可选内容?就像

.navigationDestination
当你知道一个可选值被设置为某个非零值时,它会激活:

.navigationDestination(item: self.$selectedProject)
{
    ...
}
swift swiftui button option-type
1个回答
0
投票

有什么方法可以做到这一点,这样当我已经知道它不会为零时,我就不必不必要地打开可选值?

如果你想使用 is,你必须以一种或另一种方式解开一个值。因此,如果您有一个名为

foo
的可选值并且想要使用该值,您可以:

  • if let foo...
    guard let foo...

    以通常的方式打开它
  • 使用

    !
    运算符强制打开它,例如
    foo!.value
    如果你知道它不为零(但在大多数情况下强烈建议不要这样做)

  • 设计您的代码以仅处理选项并执行正常的

    foo?.value
    可选链接

  • 使用 nil 合并运算符提供默认值,以防

    foo
    实际上为零,例如
    foo ?? 0

其中,强制展开似乎最直接地回答了您的问题,但我再次提醒您,在大多数情况下,它真的令人不悦。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.