您可以向我展示何时以及为什么使用关键字静态以及何时应该使用关键字类?(这是Swift中的类型属性语法(
定义为static func
的函数与定义为class func
的函数之间的差异是static
用于结构和枚举的函数,class
主要用于协议和类的功能。
类功能也可以被子类覆盖。例如:
class Animal{
class func generateAnimalSound(){
print("Some Animal Sound")
}
static func isAnimal() -> Bool{
return true
}
}
class Cat: Animal{
override class func generateAnimalSound(){
print("Meow!")
}
}
var someAnimal = Animal.generateAnimalSound() // prints "Some Animal Sound"
var cat = Cat.generateAnimalSound() // prints "Meow!"
但是,如果您尝试覆盖静态成员函数isAnimal()
,这将导致错误:
不能覆盖静态方法
这显然是因为子类不能覆盖静态方法。您应该阅读Apple和其他Stackoverflow相关问题提供的文档:
- Swift中的静态弹性和类弹性有什么区别?
静态与类作为类变量/方法(swift(
Swift编程语言(Swift 3.1( - 方法
您应该检查Apple在" Swift编程语言"上写的指南。关于类和结构的页面与您有关。阅读它们并了解示例。然后,您将知道何时使用结构,何时不使用结构。
此有用的摘录应回答您的问题:Swift编程语言 - 类和结构
比较类和结构
Swift中的类和结构有很多共同点。两者都可以:
- 将属性定义为存储值
- 定义提供功能的方法
- 定义下标以使用下标语法提供对其值的访问
- 定义初始化以设置其初始状态
- 扩展以将其功能扩展到默认实现之外
- 符合提供某种类型的标准功能的协议
类具有结构不具有的其他功能:
- 继承使一个类能够继承另一个的特征。
- 类型铸造使您可以在运行时检查和解释类实例的类型。
- deinitializer启用一个类的实例,以释放其分配的任何资源。
- 参考计数允许多个引用类实例。
注意:结构在您的经过时总是被复制 代码,并且不使用参考计数。