为什么要在模型中使用私有变量?
Why should I use private variables in the model?
我在一个在线视频中找到了这个例子,但我无法真正理解它的重要性以及幕后发生的事情:
class Person {
private var _name: String!
var name: String {
return _name
}
init(name: String){
_name = name
}
}
在视频中他提到私有变量是为了防止 类 操纵数据,但我不明白为什么这会成为一个问题,以及它是如何发生的。
有人可以像我 5 岁一样向我解释一下吗?
感谢帮助
如果您想确保一个人的姓名始终是有效值,您需要在代码中放置一个位置来检查写入姓名字段的数据。如果通过将其可见性更改为私有来隐藏该字段,来自 class 外部的代码必须使用 setter 方法写入名称字段。您可以在 setter 方法中执行所有验证要求,以确保人员对象中的数据始终处于有效状态。
这是面向对象编程的基本原则。您可以在此处阅读更多信息 link Wikipedia - Encapsulation
Can someone please explain this to me like i'm 5?
好的,我五岁的朋友,你很熟悉"stranger = danger"规则吧?有时,您的对象需要与陌生人互动。虽然在许多情况下,与您的对象互动的陌生人是善意的,但偶尔您会 运行 遇到想要伤害您的对象的人,例如,通过更改其名称:
// If name were public, anyone could do this:
somePerson._name = "nasty-boy" // Not a good name!
为了保护您的对象免受想要重命名的陌生人的影响,您通过标记 private
使对象之外的任何人都无法访问重要的内容。这使得对象之外的任何人都无法访问这些重要的东西。而对象自身的方法可以自由访问私有变量,例如return给陌生人读,不写:
var name: String {
return _name
}
我在一个在线视频中找到了这个例子,但我无法真正理解它的重要性以及幕后发生的事情:
class Person {
private var _name: String!
var name: String {
return _name
}
init(name: String){
_name = name
}
}
在视频中他提到私有变量是为了防止 类 操纵数据,但我不明白为什么这会成为一个问题,以及它是如何发生的。
有人可以像我 5 岁一样向我解释一下吗?
感谢帮助
如果您想确保一个人的姓名始终是有效值,您需要在代码中放置一个位置来检查写入姓名字段的数据。如果通过将其可见性更改为私有来隐藏该字段,来自 class 外部的代码必须使用 setter 方法写入名称字段。您可以在 setter 方法中执行所有验证要求,以确保人员对象中的数据始终处于有效状态。
这是面向对象编程的基本原则。您可以在此处阅读更多信息 link Wikipedia - Encapsulation
Can someone please explain this to me like i'm 5?
好的,我五岁的朋友,你很熟悉"stranger = danger"规则吧?有时,您的对象需要与陌生人互动。虽然在许多情况下,与您的对象互动的陌生人是善意的,但偶尔您会 运行 遇到想要伤害您的对象的人,例如,通过更改其名称:
// If name were public, anyone could do this:
somePerson._name = "nasty-boy" // Not a good name!
为了保护您的对象免受想要重命名的陌生人的影响,您通过标记 private
使对象之外的任何人都无法访问重要的内容。这使得对象之外的任何人都无法访问这些重要的东西。而对象自身的方法可以自由访问私有变量,例如return给陌生人读,不写:
var name: String {
return _name
}