在Swift中定义一个只读属性

Jas*_*son 5 xcode uiview ios swift xcode8

如何在Swift中定义只读属性?我有一个父类,需要定义一个公共属性,例如。itemCount。这是我的代码:

Class Parent: UIView {
  private(set) var itemCount: Int = 0
}

class Child {
  private(set) override var itemCount {
    get {
      return items.count
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到错误: Cannot override mutable property with read-only property


选项1-协议:

我不能使用协议,因为它们不能从类(UIView)继承

选项2-组成:

我将一个添加var view = UIView到我的Child类中,并UIViewParent该类中删除继承。这似乎是唯一可能的方法,但是在我的实际项目中,似乎做错了事,例如。addSubview(myCustomView.view)

选择3 -子类UIViewChild

我也不能这样做,因为我打算拥有多个Child具有不同属性和行为的相关类,并且我需要能够将Child类的实例声明为Parent类,以利用UIView'属性和Parent'公共属性。

Luc*_*tti 5

您可以使用Computed Property可以被覆盖的(类似于方法)。

class Parent: UIView {
    var itemCount: Int { return 0 }
}

class Child: Parent {
    override var itemCount: Int { return 1 }
}
Run Code Online (Sandbox Code Playgroud)

更新(作为对下面评论的回复)

这就是您声明和覆盖函数的方式

class Parent: UIView {
    func doSomething() { print("Hello") }
}

class Child: Parent {
    override func doSomething() { print("Hello world!") }
}
Run Code Online (Sandbox Code Playgroud)