在Swift中定义一个read-only属性
Define a read-only property in Swift
如何在Swift中定义read-only属性?我有一个 parent class 需要定义一个 public 属性 例如。 itemCount
。这是我的代码:
Class Parent: UIView {
private(set) var itemCount: Int = 0
}
class Child {
private(set) override var itemCount {
get {
return items.count
}
}
}
我收到错误:Cannot override mutable property with read-only property
选项 1 - 协议:
我不能使用协议,因为它们不能继承自 classes (UIView
)
选项 2 - 组成:
我将 var view = UIView
添加到我的 Child class 并从我的 Parent
class 中删除 UIView
继承。这似乎是唯一可能的方法,但在我的实际项目中,这似乎是错误的做法,例如。 addSubview(myCustomView.view)
选项 3 - class UIView
Child
class
我也不能这样做,因为我打算拥有多个具有不同属性和行为的相关 Child
classes,并且我需要能够声明我的 [=22] 的实例=] class 与 Parent
class 一样,可以利用 UIView
的属性和 Parent
的 public 属性。
您可以使用 Computed Property
可以覆盖(就像方法一样)。
class Parent: UIView {
var itemCount: Int { return 0 }
}
class Child: Parent {
override var itemCount: Int { return 1 }
}
更新(作为对下面评论的回复)
这就是您声明和覆盖函数的方式
class Parent: UIView {
func doSomething() { print("Hello") }
}
class Child: Parent {
override func doSomething() { print("Hello world!") }
}
作为另一种选择,您可以将私有变量用于 read/write,将另一个用于只读。计算您用于内部 class 更改的计数,以及用于 public 访问的 numberOfItems。有点奇怪,但它解决了问题。
class someClass {
private var count: Int = 0
var numberOfItems: Int { return count }
func doSomething() {
count += 1
}
}
您可以将 setter 声明为私有,而 getter 是 public。
public class someClass {
public private(set) var count: String
}
参考这个link
如何在Swift中定义read-only属性?我有一个 parent class 需要定义一个 public 属性 例如。 itemCount
。这是我的代码:
Class Parent: UIView {
private(set) var itemCount: Int = 0
}
class Child {
private(set) override var itemCount {
get {
return items.count
}
}
}
我收到错误:Cannot override mutable property with read-only property
选项 1 - 协议:
我不能使用协议,因为它们不能继承自 classes (UIView
)
选项 2 - 组成:
我将 var view = UIView
添加到我的 Child class 并从我的 Parent
class 中删除 UIView
继承。这似乎是唯一可能的方法,但在我的实际项目中,这似乎是错误的做法,例如。 addSubview(myCustomView.view)
选项 3 - class UIView
Child
class
我也不能这样做,因为我打算拥有多个具有不同属性和行为的相关 Child
classes,并且我需要能够声明我的 [=22] 的实例=] class 与 Parent
class 一样,可以利用 UIView
的属性和 Parent
的 public 属性。
您可以使用 Computed Property
可以覆盖(就像方法一样)。
class Parent: UIView {
var itemCount: Int { return 0 }
}
class Child: Parent {
override var itemCount: Int { return 1 }
}
更新(作为对下面评论的回复)
这就是您声明和覆盖函数的方式
class Parent: UIView {
func doSomething() { print("Hello") }
}
class Child: Parent {
override func doSomething() { print("Hello world!") }
}
作为另一种选择,您可以将私有变量用于 read/write,将另一个用于只读。计算您用于内部 class 更改的计数,以及用于 public 访问的 numberOfItems。有点奇怪,但它解决了问题。
class someClass {
private var count: Int = 0
var numberOfItems: Int { return count }
func doSomething() {
count += 1
}
}
您可以将 setter 声明为私有,而 getter 是 public。
public class someClass {
public private(set) var count: String
}
参考这个link