【发布时间】:2016-06-26 17:10:09
【问题描述】:
我希望在 Swift 中的类中声明一个私有变量,并使用公共(实际上是内部)方法访问它。下面的代码对吗?
class someClass {
// Using underscore here to distinguish variable and method
private var _privateArray: [String]
...
func privateArray() {
return _privateArray
}
func setPrivateArray(someArray: [String]) {
_privateArray = someArray
}
}
我想使用上面的原因是因为我想在任何子类中使用数组,但名称对子类有意义。
class someSubclass: someClass {
var arrayWithMeaningfulName: [String]
init() {
arrayWithMeaningfulName = super.privateArray()
...
}
}
不确定以上是否是实现我想要的最佳方式。感谢您的反馈。
顺便说一句,我确实尝试如下声明私有变量,但编译器抱怨:
class someClass {
private var _privateArray: [String] {
get {
...
}
set {
...
}
...
【问题讨论】:
-
是什么让您认为它可能不是“正确的”?
-
公共访问器对私有变量有什么好处/用途(严肃的问题)?
-
"The reason I want to use the above is because I want to use the array in any subclasses, but with a name which is meaningful to the subclass."这对我来说没有多大意义。当然,我完全赞成命名良好的变量,但我认为我需要一个更具体的例子来说明你在这里试图完成的事情,因为它没有多大意义。 -
Scott Hunter 我认为 Thomas A 已经回答了你的问题;我应该使用计算属性而不是这两种方法。
-
@Koen 你也需要封装你的数据,即使你设置它......所以你可以过滤你不想要的值,即:
if myValue < 0, then don't set it and return an error