Objective-C объявляет функцию класса initialize(), которая запускается один раз для каждого класса до его использования. Он часто используется в качестве точки входа для обмена реализацией методов (swizzling), между прочим. Его использование устарело в Swift 3.1.
Это то, что я использовал:
extension NSView {
public override class func initialize() {
// This is called on class init and before 'applicationDidFinishLaunching'
}
}
Как я могу достичь того же самого элемента без initialize
?
Мне нужно это для фреймворка, поэтому требовать вызова в AppDelegate не стоит. Мне нужно, чтобы он вызывался перед applicationDidFinishLaunching
.
Мне действительно нравится это решение. Это именно то, что я ищу, но это для iOS. Мне это нужно для macOS. Может ли кто-нибудь предложить версию macOS?
Чтобы быть конкретным, мне нужен эквивалент этого, но для macOS:
extension UIApplication {
private static let runOnce: Void = {
// This is called before 'applicationDidFinishLaunching'
}()
override open var next: UIResponder? {
UIApplication.runOnce
return super.next
}
}
Я пробовал переопределять различные свойства в NSApplication
без успеха.
Решение должно быть в чистом Swift. Нет цели-C.