从命令行构建的Swift 4 MacOS应用未调用AppDelegate#applicationDidFinishLaunching

时间:2018-08-08 21:42:04

标签: swift macos command-line

这是完整的代码:

main.swift

import Cocoa

let delegate = AppDelegate()
NSApplication.shared.delegate = delegate
NSApplicationMain(CommandLine.argc, CommandLine.unsafeArgv)

AppDelegate.swift

import Cocoa

class AppDelegate: NSObject, NSApplicationDelegate {
  override init() {
    Swift.print("AppDelegate.init")
    super.init()
    Swift.print("AppDelegate.init2")
  }

  func applicationDidFinishLaunching(aNotification: NSNotification) {
    Swift.print("AppDelegate.applicationDidFinishLaunching")
  }

  func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
    Swift.print("AppDelegate.applicationShouldTerminateAfterLastWindowClosed")
  }
}

然后我用以下代码进行编译:

swiftc Sources/*
./main

它记录:

AppDelegate.init
AppDelegate.init2

但是随后它不记录其他任何内容,因此我使用CTRL + C将其关闭。不确定为什么无法达到applicationDidFinishLaunching方法。想知道是否有人知道解决方法,似乎只有一种方法需要在某处调用,但我不确定。

我认为这可能导致其他问题,例如NSMenu无法正常工作。

1 个答案:

答案 0 :(得分:0)

万岁,这仅仅是因为方法的格式,我想这是默默地失败了。

func applicationWillFinishLaunching(_ notification: Notification) {
  Swift.print("AppDelegate.applicationWillFinishLaunching")
}

func applicationDidFinishLaunching(_ notification: Notification) {
  Swift.print("AppDelegate.applicationDidFinishLaunching")
}