Swift:为什么使用局部常量而不是对象属性?

时间:2014-06-24 13:50:31

标签: swift

我开始围绕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...
        }
    }
}

2 个答案:

答案 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