我开始围绕Swift,但我觉得我在这里错过了一些东西。 XCode for Core Data中的项目模板创建一个局部常量来引用对象属性,如下所示。是否有一些令人信服的理由来创建常量而不是直接引用该属性?
func saveContext () {
var error: NSError? = nil
let managedObjectContext = self.managedObjectContext
if managedObjectContext != nil {
if managedObjectContext.hasChanges && !managedObjectContext.save(&error) {
// error handling, etc...
}
}
}
答案 0 :(得分:2)
是否有一些令人信服的理由来创建常量而不是直接引用该属性?
三个原因:简洁/清晰,效率和安全。
使用临时变量代替属性可以使代码更简洁,更易于阅读。
它还避免了对属性访问器的多次多余调用。
最后,它更安全。代码检索上下文,然后将其与nil
进行比较。如果您使用单独的属性访问,则可能每次都会返回不同的值。考虑:
if self.managedObjectContext != nil {
if self.managedObjectContext.hasChanges && !self.managedObjectContext.save(&error) {
// error handling, etc...
}
}
此代码可以通过nil
的检查,但managedObjectContext
属性可能会更改。 不应该,并且不断改变上下文可能会导致其他问题,但如果您要检查一个值,最好继续使用< em>那个值并没有引入无意中使用某些其他值的可能性。
答案 1 :(得分:1)
据我所知,这是为了简洁。对象是Swift中的引用类型,而不是值类型,因此它们不会被复制到新的内存位置,因此使用managedObjectContext
只是为了让您不必一遍又一遍地键入self.managedObjectContext
。