Где AppDelegate устанавливается в качестве делегата для приложения?

#ios #swift #macos #swift5 #xcode12

#iOS #swift #macos #swift5 #xcode12

Вопрос:

Окружающая среда, Swift 5.3 и Xcode 12

Обычно мы someObject.delegate = self устанавливаем текущий класс в качестве делегата для некоторого экземпляра класса. Однако внутри AppDelegate нет такого назначения, чтобы сделать его делегатом приложения.

 import Cocoa

@main
class AppDelegate: NSObject, NSApplicationDelegate {
    func applicationDidFinishLaunching(_ aNotification: Notification) {}

    func applicationWillTerminate(_ aNotification: Notification) {}
}
  

Итак, где delegate устанавливается свойство приложения?

Ответ №1:

@UIApplicationMain атрибут означает, что этот класс является делегатом приложения, https://docs.swift.org/swift-book/ReferenceManual/Attributes.html#ID589 .

Это то же самое, что и вызов UIApplicationMain(:,:,:,:) . Если атрибут НЕ используется, укажите main.swift файл с кодом на верхнем уровне, который вызывает UIApplicationMain(:,:,:,:) (также применимо к NSApplication ).

Добавление @main , похоже, имеет тот же эффект, @UIApplicationMain что и . Замените @main на @UIApplicationMain , и приложение работает просто отлично, проверено.