我正在尝试将文件从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
}
}
答案 0 :(得分:4)
...似乎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"))