首页 > 解决方案 > 视图主体中的 swiftui 三元运算符

问题描述

在 swiftyui 正文中,基于 news.urlToImage 值,我需要能够加载另一个视图(LOadRemoteImageView,这只是另一个接受可选 url 字符串以加载远程图像的视图),或者显示文本字符串“没有图片网址”。

按照下面的语法,它工作正常

if news.urlToImage == nil {
Text("no image url")
}else {
    LoadRemoteImageView(withURL: news.urlToImage!).frame(width: 140, height: 140)
}

但是,当尝试内联代码时,它会失败,并且智能感知没有正确的错误消息

news.urlToImage == nil ? Text("no image") : LoadRemoteImageView(withURL: news.urlToImage!)

如果 urlToImage: String 不为零,也尝试使用 map 显示两个视图中的任何一个,但也失败了

news.urlToImage.map {
$0 != nil ? LoadRemoteImageView(withURL: $0) : Text("no image")

}

标签: swiftswiftuiconditional-operator

解决方案


这都是关于类型的......行表达式的结果必须生成单一类型。所以如果你喜欢三元运算符,你应该像这样使用它

news.urlToImage == nil ? AnyView(Text("no image")) : 
     AnyView(LoadRemoteImageView(withURL: news.urlToImage!))

或类似的东西……对我来说,普通if/else的更好。


推荐阅读