小编nic*_*lin的帖子

如何正确检查非可选返回值是否有效?

在尝试检查返回值时,我遇到了一个奇怪的情况,我想知道如何在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

19
推荐指数
1
解决办法
2805
查看次数

标签 统计

swift ×1