Я создал одноэлементный объект в Swift 4.2 и пытаюсь получить к нему доступ (вызвать несколько методов) в классе Objective-C. Однако при вызове экземпляра в Objective-C приложение вылетает со следующим:
EXC_BAD_INSTRUCTION (код = EXC_I386_INVOP, субкод = 0x0)
Мое одноэлементное определение Swift не является чем-то необычным, и оно прекрасно работает, когда вызывается только из других классов Swift. Вот как это выглядит:
@objc public static let sharedManager = SessionManager()
Похоже, что это не проблема языковой совместимости в проекте: не-синглтон-файлы не вызывают сбой при доступе из Objective-C. Я также не уверен, что этот код Objective-C настолько дикий, что должен вызывать его:
// Have attempted both flavors here, the crash is coming from the call to "sharedManager", which the runtime thinks is nil
SessionManager *manager = [SessionManager sharedManager];
[manager setSession:nil];
Есть идеи, как это исправить? Что мне не хватает? Почему экземпляр синглтона будет равен нулю?
<Ч />
Редактировать : Я пытался расширить реализацию Swift Singleton до этого, но он все еще не работает:
@objc final class SessionManager: NSObject {
@objc public static let _sharedManager = SessionManager()
private override init() {
super.init()
}
@objc public class func sharedManager() -> SessionManager {
return SessionManager._sharedManager
}
}