Определение, завершается ли приложение, потому что система закрывается - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь преобразовать эти строки в Objective- C в swift

- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication*)sender  
{  
   ...  
    NSAppleEventDescriptor* appleEventDesc = [[NSAppleEventManager sharedAppleEventManager] currentAppleEvent];  
    NSAppleEventDescriptor* whyDesc = [appleEventDesc attributeDescriptorForKeyword:kEventParamReason];  
    OSType why = [whyDesc typeCodeValue];  
    if (why==kAEShutDown || why==kAERestart || why==kAEReallyLogOut)  

, они обнаружат, завершается ли приложение из-за закрытия системы.

Я невозможно преобразовать эту строку

if (why==kAEShutDown || why==kAERestart || why==kAEReallyLogOut)  

Я угадал что-то вроде

    let codeValue = whyDescription?.typeCodeValue

if ((codeValue == AEKeyword(kAEShutDown)) ||
    (codeValue == AEKeyword(kAERestart)) ||
    (codeValue == AEKeyword(kAEReallyLogOut))) {

Это правильно?

или должно быть

if ((codeValue == OSType(kAEShutDown)) ||
    (codeValue == OSType(kAERestart)) ||
    (codeValue == OSType(kAEReallyLogOut))) {

Xcode компилирует его нормально, но я не уверен, что kAEShutDown, kAERestart и kAEReallyLogOut являются `AEK-ключевыми словами, которые можно использовать там.

Я не смог найти документации по этому вопросу, как и ожидалось.

1 Ответ

1 голос
/ 20 февраля 2020

И AEKeyword, и OSType - от typealias до FourCharCode. Технически они относятся к одному типу, поэтому не имеет значения, какой вы используете.

Однако, поскольку typeCodeValue объявлен как OSType, то OSType является логическим выбором.

Кроме того, кажется, что константы уже объявлены как OSType, поэтому не должно быть никаких причин для их приведения.

...