2015-03-02 3 views
1

В Objective C я могу задать вопрос isEqual и не задавать переменную экземпляра, если она уже является одним и тем же экземпляром.Swift: Условно установлен частный Ivar

-(void)setManagedObjectContext:(NSManagedObjectContext *)managedObjectContext { 
if (![_managedObjectContext isEqual:managedObjectContext]) { 

    __weak NSPersistentStoreCoordinator *psc = _managedObjectContext.persistentStoreCoordinator; 

    // iCloud notification subscriptions 
    NSNotificationCenter *dc = [NSNotificationCenter defaultCenter]; 
    [dc addObserver:self 
      selector:@selector(storesWillChange:) 
       name:NSPersistentStoreCoordinatorStoresWillChangeNotification 
      object:psc]; 

    [dc addObserver:self 
      selector:@selector(storesDidChange:) 
       name:NSPersistentStoreCoordinatorStoresDidChangeNotification 
      object:psc]; 

    [dc addObserver:self 
      selector:@selector(persistentStoreDidImportUbiquitousContentChanges:) 
       name:NSPersistentStoreDidImportUbiquitousContentChangesNotification 
      object:psc]; 

    _managedObjectContext = managedObjectContext; 
}} 

Возможно ли это с помощью setter of var in swift?

+0

Одно замечание относительно вашего кода 'если ([_ managedObjectContext IsEqual: managedObjectContext]) { '. Я считаю, что вы должны только проверять равенство указателя вместо объекта. Действительно, 'isEqual' проверяет равенство указателя для вас, но сравнение прямого указателя будет выполняться быстрее: if (_managedObjectContext! = ManagedObjectContext) –

+0

Ах да, хорошая точка Макс. Благодарю. –

ответ

1

Да, это возможно с одним нюансом: быстрые недостатки неявных иваров в смысле Objective-c. Вы должны сделать ivar самостоятельно. И используйте оператор ===, чтобы проверить равенство указателя.

import Foundation 

class Setter: NSObject { 

    private var __property: NSObject! 

    var property: NSObject!{ 
     get { 
      return self.__property 
     } 
     set { 
      if newValue === self.__property { return } 
      self.__property = newValue 
     } 
    } 
} 

Пожалуйста, проверьте эту reference и это question подробности относительно ivar концепции в Swift.

0

Если вы используете ==, который проверяет, являются ли объекты равны, и проверяет, является ли === два экземпляра имеют ту же ссылку я считаю,

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