我试图从文件加载xcassets到NSImage,这里的资产名称是标志。
我尝试了这个:
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)
根据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)
Francesco Deliro 的回答是正确的,你可以避免创建 NSImage.Name 的扩展:
let logoIcon = NSImage(named: NSImage.Name("logo"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2050 次 |
| 最近记录: |