Я могу открыться диалоговое окно подтверждения, когда пользователь закрывает окно в Safari/Chrome?

Объявление C

extern struct MYColors * appColors;

импортируется в Swift как

public var appColors: UnsafeMutablePointer!

Разыменование указателя выполняется в Swift через свойство pointee, поэтому Swift эквивалентно ( Objective-) C-код

appColors->appBackgroundColor

-

appColors.pointee.appBackgroundColor

Тип этого значения - Unmanaged!, поскольку компилятор Swift не знает, как следует управлять памятью объекта. В вашем случае вызывающая сторона не несет ответственности за освобождение объекта, поэтому окончательный код:

let bgColor = appColors.pointee.appBackgroundColor.takeUnretainedValue()

Для получения дополнительной информации о неуправляемых ссылках см. Unmanaged .

Примечание: Если appColors и все члены структуры гарантированно не равны NULL при доступе, вы можете пометить их с помощью _Nonnull в интерфейсе:

struct MYColors {
    CGColorRef _Nonnull appBackgroundColor;
    // ...
};

extern struct MYColors * _Nonnull appColors;

Затем компилятор Swift импортирует переменные как необязательные вместо (неявно развернутых).

5
задан Daniel Magliola 29 April 2009 в 19:27
поделиться

2 ответа

Это прекрасно работает для меня как в Chrome, так и в Safari:

<html><body><p>Test</p>
<script>window.onbeforeunload = function() { return "Sure?"; }</script>
</body></html>

Когда я пытаюсь закрыть окно, я получаю приглашение.

7
ответ дан 13 December 2019 в 05:42
поделиться

Сам StackOverflow использует onbeforeunload , и он отлично работает для меня в Safari:

function setConfirmUnload(a){window.onbeforeunload=a?function(){return a}:null}
2
ответ дан 13 December 2019 в 05:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: