视图主体中的 swiftui 三元运算符

Posted

技术标签:

【中文标题】视图主体中的 swiftui 三元运算符【英文标题】:swiftui ternary operator in view body 【发布时间】:2020-05-18 12:06:52 【问题描述】:

在 swiftyui 正文中,基于 news.urlToImage 值,我需要能够加载另一个视图(LOadRemoteImageView,它只是另一个接受可选 url 字符串来加载远程图像的视图),或者显示一个文本字符串“无图片 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")

【问题讨论】:

【参考方案1】:

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

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

或类似的东西...对于我来说,常规的if/else 更好。

【讨论】:

非常有价值,不知道单行必须返回单类型 谢谢一堆!

以上是关于视图主体中的 swiftui 三元运算符的主要内容,如果未能解决你的问题,请参考以下文章

三元运算符问题 SwiftUI

Swift:SwiftUI 视图的多个条件的内联评估

在视图中使用三元运算符

想不出一种将长三元运算符从我的刀片视图移动到控制器的方法

Yaml 中的三元运算符

kotlin中的三元运算符[重复]