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

标签 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...
        }
    }
}

最佳答案

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/

相关文章:

xcode - SpriteKit : var from GameScene. swift TO GameViewController.swift?

ios - UIApplication.shared.isNetworkActivityIndi​​catorVisible 设置为 false 时崩溃

ios - 在 x 秒后快速删除标签

ios - 获取图库中图像的 url 时出现问题

ios - 向 "Library/Application support"文件夹提供默认填充

iOS - 点击后弹出自定义 subview

ios - swift:导航栏模糊效果

swift - 我如何在 Firestore 数据库中查询最近的、附近的 Geopoints?

ios swift - 以编程方式呈现标签栏 Controller

swift - Swift 中的 NSObject 子类 : hash vs hashValue, isEqual vs ==