在尝试检查返回值时,我遇到了一个奇怪的情况,我想知道如何在Swift意义上"正确地"执行此操作.
我有一个NSStatusItem(命名item),我正在尝试分配NSStatusItem一个NSImage.当我创建它时NSImage,因为我传递了一个图像名称的字符串值,我想确保它NSImage实际上是有效的(如果我输错了图像名称字符串怎么办?).
我尝试的第一件事是:
if let image: NSImage? = NSImage(named: "CorrectIconName") {
item.image = image
}
Run Code Online (Sandbox Code Playgroud)
但是这给出了错误"条件绑定中的绑定值必须是可选类型".我认为这句话image: NSImage?清楚表明它是可选的,但我猜不是.
我改变了这个:
let image: NSImage? = NSImage(named: "CorrectIconName")
if image {
item.image = image
}
Run Code Online (Sandbox Code Playgroud)
哪个工作完全正常.但是我不知道为什么会这样,而第一个例子却没有.看起来或多或少完全相同.由于第一个没有编译,我以为我会尝试其他一些路线......
既然NSImage(named:)返回an NSImage而不是an NSImage?,我想我会看到如果我将构造函数的返回值直接分配给item:
item.image = NSImage(named: "CorrectIconName")
Run Code Online (Sandbox Code Playgroud)
哪个有效,但不允许我想做的错误检查.如果字符串错误,则NSStatusItem获取nil图像,这会导致我有一个不可见的状态栏项.
接下来,我尝试了这个:
let image: NSImage = NSImage(named: "CorrectIconName")
if image {
item.image = image
}
Run Code Online (Sandbox Code Playgroud)
但是这给出了错误"Type'NSImage'没有确认协议'LogicValue'",我想这意味着你nil …
swift ×1