为什么我应该在模型中使用私有变量?

时间:2017-01-06 23:18:10

标签: swift encapsulation

我在网络视频中找到了这个例子,我无法真正理解它的重要性以及幕后发生的事情:

class Person {
    private var _name: String!

    var name: String {
        return  _name
    }

    init(name: String){
        _name = name
    }
}

在视频中他提到私有变量是为了防止类操纵数据,但我无法理解为什么这会成为一个问题以及它会如何发生。

有人可以像我一样向我解释这个吗?

感谢您的帮助

2 个答案:

答案 0 :(得分:9)

  

有人可以向我解释一下,就像我5岁那样吗?

好的,我五岁的朋友,你熟悉“陌生人=危险”规则,对吗?有时,您的对象需要与陌生人交互。虽然在许多情况下,与您的对象交互的陌生人都是善意的,但有时候您会遇到想要伤害您的对象的人,例如,通过更改其名称:

// If name were public, anyone could do this:
somePerson._name = "nasty-boy" // Not a good name!

为了保护您的对象免受想要重命名的陌生人的影响,您可以通过标记private来使对象外的任何人无法访问重要内容。这使得对象之外的任何人都无法访问这些重要的事物。但是,对象自己的方法可以自由访问私有变量,例如,将它们返回给陌生人进行阅读,但不能写入:

var name: String {
    return  _name
}

答案 1 :(得分:4)

如果要确保某个人的姓名始终是有效值,则需要在代码中放置一个位置来检查写入名称字段的数据。如果通过将其可见性更改为private来隐藏该字段,则该类外部的代码必须使用setter方法写入name字段。您可以在setter方法中执行所有验证要求,以确保person对象中的数据始终处于有效状态。

这是面向对象编程的基本原理。您可以在此链接Wikipedia - Encapsulation

了解更多信息