在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