你能解释一下 Swift 中 static 和 class 的区别吗?
你能解释一下 Swift 中 static 和 class 的区别吗?
这个问题已经有答案了:
你能展示给我何时以及为什么我应该使用关键字static,以及何时应该使用关键字class吗?(这是Swift中的类型属性语法)
admin 更改状态以发布 2023年5月21日
您应该查看由Apple编写的关于“Swift编程语言”的指南。关于类和结构的页面与您有关。阅读并理解其中的示例,那么您将知道何时使用结构和何时不使用。
这篇有用的摘录应该能够回答您的问题:Swift编程语言-类和结构
比较类和结构
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()
,这将导致错误:
Cannot override static method
这显然是因为静态方法不能被子类重载。你应该阅读由苹果和其他相关的StackOverflow问题提供的文档: