Swift : Ne peut pas attribuer à “” en soi
Dans Swift, j'ai une propriété calculée appelé managedObjectContext: NSManagedObjectContext
. lorsque j'essaie de l'initialiser comme:
var managedObjectContext: NSManagedObjectContext? {
get {
createManagedObjectContext()
return self.managedObjectContext
}
set(newManagedObjectContext) {
self.manageObjectContext = newManagedObjectContext
}
}
func createManagedObjectContext() -> NSManagedObjectContext {
if let coordinator = persistentStorageCoordinator() as NSPersistentStoreCoordinator!
{
self.managedObjectContext = NSManagedObjectContext()
self.managedObjectContext!.persistentStoreCoordinator = coordinator
NSNotificationCenter.defaultCenter().addObserver(self, selector: "handleBackgroundMOCDidSaveNotification:", name: NSManagedObjectContextDidSaveNotification, object: self.managedObjectContext)
}
return self.managedObjectContext!;
}
Je reçois un message d'erreur indiquant : Cannot assign to "managedObjectContext" in self
.
Quelqu'un peut-il aider à résoudre ce problème?
Merci d'avance.
- êtes-vous de la création d'une structure ou classe?
- il a est la classe .
- Pourriez-vous montrer le reste de la classe, ça pourrait aider.
- Oui, s'il vous plaît montrer le setter pour votre propriété calculée comme un minimum
- pourquoi vous voulez une propriété calculée? vous getter/setter suffit d'appeler lui-même.
- Je le veux pour permettre nul aussi.
- C'est ce que l' ? à la fin de la déclaration, dit - cette valeur peut être assignée
- si vous ne souhaitez pas effectuer d'autres actions dans setter, mais l'attribution de la nouvelle valeur, vous n'avez pas besoin calculée définition pour la
managedObjectContext
.
Vous devez vous connecter pour publier un commentaire.
Vous aussi recevoir cette erreur de compilation lorsque vous essayez d'affecter une valeur à une
let
constante. Changer le type de la variable àvar
doit résoudre, dans ce cas.Un paresseux stockées propriété (voir le Langage de Programmation Swift livre, page 313) est plus approprié pour ce que vous essayez de faire ici.
createManagedObjectContext()
ne sera pas appelé jusqu'à ce que vous essayez d'accéder à la propriété pour la première fois (et uniquement la première fois).Votre problème est que vous êtes en utilisant une propriété calculée comme s'il s'agissait d'une propriété, vous avez réellement essayez d'appeler le setter de manière récursive . Vous n'avez pas besoin d'utiliser une propriété calculée ici, juste d'une propriété standard -
D'une propriété calculée est celle dont la valeur est calculée lorsque requis sur la base d'autres propriétés - Par exemple le "centre" de la propriété dans le Swift Langage de Programmation -
Extrait De: Apple Inc. “La Swift Langage de Programmation.” iBooks. https://itunes.apple.com/au/book/swift-programming-language/id881256329?mt=11
Centre est déterminé par l'origine et la taille et la définition le centre affecte l'origine
Ajouter!! = )