从 Assets 加载图像到 NSImage 不断出错,期望 NSImage.Name

Loading image from Assets to NSImage keep getting error, expecting NSImage.Name

我正在尝试将文件从 xcassets 加载到 NSImage,其中资产名称是徽标。

我试过这个:

let logoIcon = NSImage(named: "logo")

但我不断收到此错误:

Cannot convert value of type 'String' to expected argument type '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
    } 

}

根据 Apple Developer Forums:

中的回答

... seems like NSImage(named: String) has been replaced by NSImage(named: NSImage.Name) in Swift 4.

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

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

并这样使用:

let logoIcon = NSImage(named: .logo)

Francesco Deliro 的回答是正确的,您可以通过以下方式避免创建 NSImage.Name 的扩展:

let logoIcon = NSImage(named: NSImage.Name("logo"))

要从当前包的资产目录加载,请使用类似的东西:

let image = Bundle(for: type(of: self)).image(forResource: NSImage.Name(“logo"))!