从 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
}
}
中的回答
... 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"))!
我正在尝试将文件从 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
}
}
... 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"))!