将图像从Assets加载到NSImage时继续出现错误,期望出现NSImage.Name

Lar*_*sen 2 nsimage swift

我试图从文件加载xcassetsNSImage,这里的资产名称是标志。

我尝试了这个:

let logoIcon = NSImage(named: "logo")
Run Code Online (Sandbox Code Playgroud)

但我不断收到此错误:

无法将“字符串”类型的值转换为预期的参数类型“ NSImage.Name”

我查看了Apple Dev文档,据我所知这是正确的。但是由于某种原因,我一直收到错误消息。

我试图在macOS上做到这一点

编辑:

所以我试图做一个顶级菜单栏应用程序。

我已经调整了代码,以便将图标加载到其中,logoIcon但是未在顶部菜单栏中设置图标。

import Cocoa

extension NSImage.Name {
    static let logo = NSImage.Name("Logo")

}


@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet weak var window: NSWindow!
    @IBOutlet weak var statusMenu: NSMenu!

    let statusItem = NSStatusBar.system.statusItem(withLength: -1)


    func applicationDidFinishLaunching(_ aNotification: Notification) {

        // statusItem.title  = "SECRET"

        let logoIcon = NSImage(named: .logo)

        // icon?.isTemplate = true
        statusItem.image = logoIcon
        statusItem.menu = statusMenu

    }

    func applicationWillTerminate(_ aNotification: Notification) {
        // Insert code here to tear down your application
    } 

}
Run Code Online (Sandbox Code Playgroud)

Fra*_*iro 6

根据Apple开发者论坛中的以下答案

...似乎在Swift 4中已将NSImage(名称:String)替换为NSImage(名称:NSImage.Name)。

因此,如答案中所建议,您可以创建结构NSImage.Name的扩展名:

extension NSImage.Name {  
    static let logo = NSImage.Name("logo")  
} 
Run Code Online (Sandbox Code Playgroud)

并以这种方式使用它:

let logoIcon = NSImage(named: .logo)
Run Code Online (Sandbox Code Playgroud)


use*_*886 5

Francesco Deliro 的回答是正确的,你可以避免创建 NSImage.Name 的扩展:

let logoIcon = NSImage(named: NSImage.Name("logo"))
Run Code Online (Sandbox Code Playgroud)