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

4c8rllxm  于 12个月前  发布在  Swift
关注(0)|答案(1)|浏览(122)

我现在有这个代码:

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

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

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


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

yacmzcpb

yacmzcpb1#

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

.none
.some(true)
.some(false)

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

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


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

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


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

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

相关问题