SwiftUI中如何避免检查可选值时重复编写Text视图?
解决SwiftUI中重复Text视图的问题
错误原因分析
你尝试的写法报错是因为vm.place?.isSaved是可选布尔类型(Bool?),而三元运算符?:要求条件必须是非可选的布尔值,所以编译器提示需要解包可选值。
几种简洁的重写方式
方式1:nil合并运算符 + 三元运算符
利用??把可选布尔值转为非可选,再判断显示文本:
Text((vm.place?.isSaved ?? false) ? "Saved" : "Want to go")
逻辑说明:当vm.place?.isSaved为nil时,?? false会将其转为false,最终三元运算符返回"Want to go",和原代码逻辑完全一致。
方式2:提前计算文本内容
先单独计算要显示的字符串,再传给Text,可读性更强:
let displayText = vm.place?.isSaved == true ? "Saved" : "Want to go" Text(displayText)
逻辑说明:可选布尔值== true只有在值确实为true时才返回true,nil或false都会返回false,从而显示"Want to go"。
方式3:使用map处理可选值
通过map对存在的布尔值做转换,nil时用??兜底:
Text(vm.place?.isSaved.map { $0 ? "Saved" : "Want to go" } ?? "Want to go")
逻辑说明:如果vm.place?.isSaved有值,map会把布尔值转换成对应的字符串;如果是nil,则直接使用??后的"Want to go"。
内容的提问来源于stack exchange,提问作者user2343632
相关产品推荐
相关产品推荐

