我怎样才能像这样使用卫士:

guard let value = vm.value1 || let value = vm.value2 else { return }

我需要判断Value1,如果它有值,继续使用它,否则判断Value2,使用它,否则:退出.只有一个才能有价值.

推荐答案

您所描述的语义似乎是:

guard let value = vm.value1 ?? vm.value2 else { return }

如果vm.value1不是nil,则value将绑定到它的值,并且将执行guard语句之后的代码.

否则,如果vm.value2不是nil,则value将绑定到它的值,并且将执行guard语句之后的代码.

否则,return人将被执行.


同样,可以使用多个let来实现类似于逻辑"AND"的语义:

guard let value1 = vm.value1, let value2 = vm.value2 else { return }

仅当vm.value1不为nil、and vm.value2不为nil且value1value2绑定到相应的值时,才执行guard语句后的代码.

还请注意,您也可以将任意布尔条件与let个绑定混合在一起:

guard let value = vm.value1, someBool || someOtherBool else { return }

Swift相关问答推荐

如何获取SCNCamera正在查看的网格点(SCNNode)的局部坐标和局部法线?

try 在小部件内部读取核心数据的SwiftUI总是返回空吗?

在SwiftUI中判断选项时避免重复查看

String.Index encodedOffset已弃用,但建议的替代方案不起作用

SwiftUI,如何更改具有多个按钮和一个布尔条件的一个按钮标签

协议元类型'SomeProtocol.Type'上无法使用静态成员'currency'

SwiftUI如何能够在Text中使用字符串字面量来创建LocalizedStringKey?

macOS SwiftUI: 如何触发删除一个项目?

为什么 XUIView 中的 Binding 看不到更新后的值?

为什么我在我的 Swift iOS 应用程序项目中收到 Xcode 中的错误消息无法识别的 Select 器发送到类?

Swift Property Wrappers-Initialization 失败并显示无法将‘Double’类型的值转换为预期的参数类型

我怎样才能缩短(提高效率)这段代码?

Pod lib lint 命令找不到 watchos 模拟器

SwiftUI:当 currentIndex 值更改时,数组中的第 n 个视图是否已换出?

如何确定扩展中的具体类型?

如何让动画变慢 SwiftUI

swiftui更改显示的 Select 器值

如何使 SwiftUI Picker 换行文本

无法分配给属性:absoluteString是一个只能获取的属性

.onTapGesture 不适用于 Stepper,仅适用于其文本