在Swift

时间:2016-07-12 00:17:08

标签: ios swift xcode uiview xcode8

如何在Swift中定义只读属性?我有一个需要定义公共属性的父类,例如。 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 - 协议:

我无法使用协议,因为它们无法继承类(UIView

选项2 - 组成:

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

选项3 - UIView

上的子类Child

我无法做到这一点,因为我打算让多个相关的Child类具有不同的属性和行为,我需要能够将我的Child类的实例声明为Parent课程,以利用UIView的媒体资源和Parent公共媒体资源。

3 个答案:

答案 0 :(得分:4)

您可以使用可以覆盖的<system.net> <connectionManagement> <add address="*" maxconnection="500"/> </connectionManagement> </system.net> <system.web> (如方法)。

Computed Property

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

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

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

class Child: Parent {
    override var itemCount: Int { return 1 }
}

答案 1 :(得分:1)

作为另一个选项,您可以使用私有变量进行读/写,将另一个变量用于只读。计算您用于内部类更改,并使用numberOfItems进行公共访问。有点奇怪,但它解决了这个问题。

class someClass {
    private var count: Int = 0
    var numberOfItems: Int { return count }

    func doSomething()  {
       count += 1
    }
}

答案 2 :(得分:1)

当getter是public时,您可以将setter声明为private。

public class someClass {
    public private(set) var count: String
}

请参阅此link