将图像从Assets加载到NSImage不断收到错误,期待NSImage.Name

时间:2018-03-01 15:22:53

标签: swift nsimage

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

我试过了:

let logoIcon = NSImage(named: "logo")

但我一直收到这个错误:

  

无法将'String'类型的值转换为预期的参数类型'NSImage.Name'

我已经查看了Apple Dev Documentation,从我能说的是正确的。但由于某种原因,我不断收到错误。

如果有所作为,我试图在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
    } 

}

3 个答案:

答案 0 :(得分:4)

根据Apple Developer Forums:

中的答案
  

...似乎NSImage(named:String)已被Swift 4中的NSImage(名为:NSImage.Name)取代。

因此,在答案中建议您可以创建struct NSImage.Name的扩展名:

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

以这种方式使用它:

let logoIcon = NSImage(named: .logo)

答案 1 :(得分:1)

要从当前捆绑包的资产目录中加载,请使用类似以下内容的

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

答案 2 :(得分:0)

弗朗切斯科·德利罗(Francesco Deliro)的答案是正确的,您可以避免使用以下方法创建NSImage.Name的扩展名:

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