Swift:有条件地设置私人Ivar

时间:2015-03-02 08:22:22

标签: swift properties

在Objective C中,我可以问'isEqual'这个问题并避免设置实例变量(如果它已经是同一个实例)。

-(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;
}}

这是否可以在swift中设置var?

2 个答案:

答案 0 :(得分:1)

是的,有可能有一个细微差别:在Objective-c意义上迅速缺乏隐含的ivars。你必须自己做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,了解有关Swift中ivar概念的详细信息。

答案 1 :(得分:0)

如果你使用==检查对象是否相等而且===检查两个实例是否具有相同的引用我相信