【发布时间】:2021-11-19 20:02:37
【问题描述】:
我一直在尝试寻找一种方法来快速检查 SF 符号和图像是否存在。
在我遇到的所有答案中,都使用了 nil 合并运算符 (??),这需要始终存在的 default 图像。这在我的情况下不起作用。
我想测试一个图像(或符号)是否存在,如果存在则返回,否则返回nil。
如何做到这一点?
重要提示
我正在尝试使用SwiftUI 的Image 来实现这一点,用于多平台应用程序。我试图避免使用UIImage 或NSImage 进行检查。
更新 1
注 1:
请求不存在的 SF 符号时(例如,systemName: [name] 参数中有错字),图像显示为空白区域。 (用Label测试)
以下解决方案经测试无效:
(注意:在所有的尝试中,都有一个变量name: String)
解决方案 1
let image = Image(systemName: name)
if image {
return image
} else {
return nil
}
抛出错误:
无法将“图像”类型的值转换为预期条件类型“布尔”
在以下情况下会引发完全相同的错误:let image = Image(name)
解决方案 2
if let image = Image(systemName: name) {
return image
}
抛出错误:
条件绑定的初始化器必须是 Optional 类型,而不是 'Image'
解决方案 3
let image = Image(systemName: name)
if image != nil {
return image
}
不起作用并给出警告:
比较 'Image' 类型的非可选值与 'nil' 总是返回 true
【问题讨论】:
-
只返回符号中的图像,它存在就是它,否则它会为零,不是吗?
-
也许你应该添加一些代码来澄清你的问题。顺便说一句,SF Symbol 怎么可能不存在?
-
这正是
image(named)和image(systemName)已经在做的事情,那么问题是什么? -
@Lae 我没有意识到这是一个不会出错的初始化程序。 UIKit initializer 将返回零。所以只要用它来检查它是否为nil
UIImage(systemName: "whatever") != nil -
噢噢噢,你说的是 SwiftUI Image。从最初的问题来看,这并不是很清楚。始终标记(就像 Leo Dabus 现在为您所做的那样)。
标签: image if-statement swiftui symbols exists