Swift: 有条件地设置私有 Ivar
Swift: Conditionally Set Private Ivar
在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 的 setter 吗?
是的,有一个细微差别是可能的:swift 缺少 Objective-c 意义上的隐式 ivar。你必须自己做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 and this question 以了解有关 Swift 中 ivar
概念的详细信息。
如果你使用 == 检查对象是否相等,而 === 检查两个实例是否具有相同的引用,我相信
在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 的 setter 吗?
是的,有一个细微差别是可能的:swift 缺少 Objective-c 意义上的隐式 ivar。你必须自己做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 and this question 以了解有关 Swift 中 ivar
概念的详细信息。
如果你使用 == 检查对象是否相等,而 === 检查两个实例是否具有相同的引用,我相信