我开始全神贯注于 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...
}
}
}
最佳答案
Is there some compelling reason for creating the constant instead of referring to the property directly?
三个原因:简洁/清晰、效率和安全。
使用临时变量代替属性使代码不那么困惑,更易于阅读。
它还避免了对属性访问器的大量多余调用。
最后,它更安全。该代码检索上下文,然后将其与 nil
进行比较。如果您使用单独的属性访问,您可能每次都返回不同的值。考虑:
if self.managedObjectContext != nil {
if self.managedObjectContext.hasChanges && !self.managedObjectContext.save(&error) {
// error handling, etc...
}
}
此代码可以通过 nil
检查,但 managedObjectContext
属性可能会更改。它不应该,随意更改上下文可能会导致其他问题,但如果您要检查一个值,最好继续使用那个值并且不会引入无意中使用某些其他值的可能性。
关于Swift:为什么使用局部常量而不是对象属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24388413/