我正在理解OOP
使用MyClass.myFunction()
,
class MyClass {
static func myFunction() {
// Do suff
}
}
或者更好的做MyClass().myFunction()
,其中
class MyClass {
func myFunction() {
// Do suff
}
}
对我来说,我不需要有多个实例,所以我应该坚持使用第一个实例吗?
答案 0 :(得分:3)
编写实例方法与静态方法的选择不是关于您打算创建的实例数量,而是关于该方法实际需要做什么的更多信息。如果您的方法需要访问它被调用的实例的任何属性,那么它显然需要是一个实例方法。例如,如果不需要访问属性,并且该方法是与类相关的帮助器,则静态方法可能有意义。
例如:
class MyClass {
var id: String
init(id: String) {...}
func printId() {
print(self.id)
}
static func className() -> String {
return "MyClass"
}
}
这将允许您通过调用静态方法MyClass.className()
来获取类的名称,而无需实例。如果您有一个实例并想要id
,则可以调用实例方法printId
。
let instance = MyClass(id: "abc")
instance.printId() //prints "abc"
这显然是一个过于简单的例子,但它说明了在决定如何声明方法时需要提出的最基本的问题之一。
作为良好使用静态方法的更好示例,您可能有一个静态方法负责从外部API获取实例化类所需的数据。这最有意义的是静态方法,因为在API调用完成之前,您不会拥有创建实例所需的内容(并返回所需的所有属性)。
答案 1 :(得分:0)
使用单例模式。像这样:
class MyClass{
static let sharedInstance = MyClass()
private init(){} //Make your constructor private
func myFunction() {
// Do suff
}
}
然后像这样访问:
MyClass.sharedInstance.myFunction()
只有一个类的实例存在。您可以添加其他属性和功能。