Я пытался поиграть со Swift 3, но не могу начать. Следующий код компилируется, но ничего не регистрирует. Похоже, applicationDidFinishLaunching не звонят. Я упустил здесь какую-то важную деталь?

Sources / main.swift :

import AppKit

class AppDelegate: NSObject, NSApplicationDelegate {
    func applicationDidFinishLaunching(aNotification: NSNotification) {
        NSLog("application start")
    }
}

NSApplication.shared()
NSApp.setActivationPolicy(.regular)
let controller = AppDelegate()
NSApp.delegate = controller
NSApp.run()

P.s. Есть аналогичный вопрос о том, что applicationDidFinishLaunching вызывается, но ничего не печатает. Я считаю, что это не так, поскольку использование window.orderFrontRegardless() вместо ведения журнала также не имеет для меня никакого эффекта.

System Version: OS X 10.11.6

> swift --version
Apple Swift version 3.0 (swiftlang-800.0.43.6 clang-800.0.38)
Target: x86_64-apple-macosx10.9
5
Allactaga 4 Сен 2016 в 02:10

3 ответа

Лучший ответ

Если вы хотите реализовать протоколы Objective-C в Swift 3, вам нужно использовать _, указывающее, что метод не имеет метки для первого параметра.

func applicationDidFinishLaunching(_ aNotification: Notification) {

(ОБНОВИТЬ)

Извините, в моем первом коде я забыл заменить NSNotification на Notification. (Спасибо, Лео Дабус.)

4
OOPer 4 Сен 2016 в 01:17

Строка, в которой вы ссылаетесь, но не используете NSApplication.shared, выглядит опечаткой. Если вы замените его на NSApp = NSApplication.shared и убедитесь, что подпись метода в AppDelegate верна, он должен работать.

0
R. Rincón 9 Май 2018 в 13:53

Есть аналогичная проблема, когда {{X 0}} не получал вызов.

Для меня проблема заключалась в том, что App Delegate ссылается на точку .

enter image description here

Решение. Просто удалите его, а затем снова подключите, и проблема решена.

Вот как вы можете воссоздать соединение

enter image description here

0
aToz 2 Авг 2019 в 03:19