2016-05-19 3 views
3

Я пытаюсь использовать singleton для Core Data. Раньше я был успешно в состоянии сделать это, создав класс CoreDataStack.h/.m, вызвав метод стека по умолчанию ниже, и его соответствующий контекст управляемого объекта, в Objective-C, и работает очень хорошо:Создание синглета для моего базового стека по умолчанию в Swift

//RETURNS CoreDataStack 
+ (instancetype)defaultStack { 
    static CoreDataStack *defaultStack; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     defaultStack = [[self alloc]init]; 
    }); 

    return defaultStack; 
} 

Однако, Я использую проект Swift, и я изо всех сил пытаюсь преобразовать его в новый синтаксис Swift. Как я могу это сделать? Это моя попытка до сих пор:

class func defaultStack() -> Self { 
    var defaultStack: CoreDataStack 
    var onceToken: dispatch_once_t = 0 
    dispatch_once(&onceToken) { 
     defaultStack = self.init() 
    } 
    return defaultStack 
} 

и мой Xcode генерируется ошибка:

enter image description here

ответ

6

Чтобы создать синглтон, используйте Krakendev's однострочного код одноплодный:

class CoreDataStack { 

    // Here you declare all your properties 

    static let sharedInstance = User() 

    private init() { 
     // If you have something to do at the initialization stage 
     // you can add it here. It will only be called once. Guaranteed. 
    } 

    // Add the rest of your methods here 

} 

Вы будете называть ваши методы и свойства такими, как CoreDataStack.sharedInstance().property и CoreDataStack.sharedInstance().method(). Я рекомендую использовать что-то более короткое, а не sharedInstance, например service.

Это решение применяется в целом не только в вашем ядре данных с сердечником.

Смежные вопросы