在SwiftUI中检查选项时避免重复视图

4c8rllxm  于 2024-01-05  发布在  Swift
关注(0)|答案(1)|浏览(145)

我现在有这个代码:

  1. if let isSaved = vm.place?.isSaved {
  2. Text(isSaved ? "Saved" : "Want to go")
  3. } else {
  4. Text("Want to go")
  5. }

字符串
我如何重写它来避免使用Text视图的“Want to go”版本两次?
如果我试着:

  1. Text(vm.place?.isSaved ? "Saved" : "Want to go")


我得到错误:
必须将可选类型“Bool?”的值解封装为类型“Bool”的值

yacmzcpb

yacmzcpb1#

实际上,vm.place?.isSaved返回Optional<Bool>,它有3的情况:

  1. .none
  2. .some(true)
  3. .some(false)

字符串
这就是不能直接使用三元运算符的原因。
你可以通过忽略以下情况来摆脱可选性:

  1. Text(vm.place?.isSaved == true ? "Saved" : "Want to go")


或者给它一个默认值,比如:

  1. Text(vm.place?.isSaved ?? false ? "Saved" : "Want to go")


也许将代码分开一点有助于它更清晰:

  1. let optionalIsSaved: Optional<Bool> = vm.place?.isSaved
  2. let defaultedIsSaved: Bool = optionalIsSaved ?? false
  3. Text(defaultedIsSaved ? "Saved" : "Want to go")

展开查看全部

相关问题